黑马程序员技术交流社区
标题:
为什么子类的向上转型可以转型成接口?
[打印本页]
作者:
ruibocool
时间:
2015-5-12 09:39
标题:
为什么子类的向上转型可以转型成接口?
interface A{}
A a=new A(){};
这相当于a是接口A的对象了
作者:
396460221
时间:
2015-5-12 10:06
A a=new A();这个才是接口A的对象,但这样是不能成功的。A a=new A(){};这个相当于是接口A 的子类,但大括号内要重写接口的方法。
作者:
ruibocool
时间:
2015-5-12 10:33
396460221 发表于 2015-5-12 10:06
A a=new A();这个才是接口A的对象,但这样是不能成功的。A a=new A(){};这个相当于是接口A 的子类,但大 ...
class A{}
class B extends A{}
A b=new B();
这样,b是A的对象,还是B的对象啊?
如果b是A的对象,那么像上例,如果把A改为接口,那不还是接口A的对象吗
作者:
王先荣
时间:
2015-5-12 10:54
本帖最后由 王先荣 于 2015-5-12 10:56 编辑
这里涉及到两个概念 一个是匿名内部类 一个是多态 。如果是interface A{} A a=new A();这就是你的观点 但后面有个大括号,就是相当与有个类实现了这个接口A new完了 生成了一个子类 对象 然后赋值给接口 这步就是多态的概念了
作者:
iamnoten
时间:
2015-5-12 10:55
说b实现了A接口更准确
作者:
348532020
时间:
2015-5-12 11:04
class A{}
class B extends A{}
A a=new B();
这样,a是A的对象 .但是他调方法的时候是编译的时候看做边,执行看右边。比如 调用A中的一个show方法,a.show();编译的时候看左边,只要A类中有这个方法就不会报错,然后执行的时候是看右边的,也就是执行的是B类中重写的那个方法。
如果把A改为接口,那就是是接口A的对象。但是接口都是抽象类,所以不能实例化,A a = new B(); 也是多态,让B 实现A接口,这样B类中一定会重写接口中的方法,然后用A对象调方法,其实执行的是b类中重写的方法。这就是多态的特点。父类或者父接口不能实例化的时候都是用A a = new B();的方法。实际的是调用的子类中重写的方法,但是对象是父类的对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2