黑马程序员技术交流社区

标题: 接口不是不能示例化吗 [打印本页]

作者: 敲敲敲dm    时间: 2016-8-8 10:27
标题: 接口不是不能示例化吗
public class MemberPoints {
    public static void main(String[] args) {
       Person p = new Student();  //为什么这不报错,求教
        p.print();
    }
}

    interface Person{
        public static final int age=10;
        void print();
        //public Person(){}  
    }
    class Student implements Person{
        public void print(){
            System.out.println( age);
        }
    }
为什么


作者: cat73    时间: 2016-8-8 10:37
因为 new Student
作者: 阿卜    时间: 2016-8-8 13:38
这并没有new Person(),new 的是 Student(),请参考父类引用指向子类对象相关知识
作者: 726477179    时间: 2016-8-8 19:32
这里是父类引用指向子类对象,
作者: 敲敲乐z    时间: 2016-8-8 21:46
这个跟多态一样吧,这里是父类引用指向子类对象!
作者: zwq0604    时间: 2016-8-8 22:00
这个是多态
作者: x55555lg    时间: 2016-8-8 22:27
这个是多态,类似于Student是Person的子类
作者: 夜行御史    时间: 2016-8-8 22:28
多态的,我们老师的解释:元神是Student,Person是肉身。   编译的时候看左边,即Person中有没有print方法,运行看右,也就是p.print()其实调的是子类中的print方法,   over
作者: gonghe    时间: 2016-8-8 23:18
多态的一个应用
作者: 乐仔其中    时间: 2016-8-9 00:27
这就是多态的表现形式。
作者: Maroon    时间: 2016-8-9 00:42
这个是多态,父类引用指向子类对象
作者: 敲敲敲dm    时间: 2016-8-9 22:27
Maroon 发表于 2016-8-9 00:42
这个是多态,父类引用指向子类对象

谢啦 现在搞懂了

作者: 敲敲敲dm    时间: 2016-8-9 22:28
cat73 发表于 2016-8-8 10:37
因为 new Student

谢谢帮忙,谢谢啦,现在弄懂了
作者: 夏:默秋凉    时间: 2016-8-10 23:24
这个是多态的知识
多态的前提是第一是必须有继承(类与类产生关系),然后必须有复写(重写)
父类或者是父接口指向子类对象
因为学生属于人吧
直接可以用person p = new Student()
person是父类 可以直接指向子类对象
这样的例子还有很多,比如动物 和猫,狗都是多态
多态的好处就是提高了代码的复用性
多态中成员函数 变量 静态方法的特点
静态变量 和静态方法都是运行和编译都看左边
而成员方法是编译看左边  运行看右边(因为有重写)

如果想判断这个字了i是不是属于父类可以使用instanceOf这个关键字

注意:多态中将子类的权限=提升到了父类型
但是父类只能访问父类自己的 不能访问子类特有的数据,如果想访问必须进行向下转型如:
Student s = (Student)p;
用s去调用子类的特有属性

作者: li--yong    时间: 2016-8-10 23:25
这是多态,接口实现类




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2