A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

interface A{}
A a=new A(){};
这相当于a是接口A的对象了

5 个回复

倒序浏览
A a=new A();这个才是接口A的对象,但这样是不能成功的。A a=new A(){};这个相当于是接口A 的子类,但大括号内要重写接口的方法。
回复 使用道具 举报 1 0
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:56 编辑

这里涉及到两个概念 一个是匿名内部类 一个是多态 。如果是interface A{}  A a=new A();这就是你的观点 但后面有个大括号,就是相当与有个类实现了这个接口A new完了 生成了一个子类 对象 然后赋值给接口 这步就是多态的概念了
回复 使用道具 举报
说b实现了A接口更准确
回复 使用道具 举报
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();的方法。实际的是调用的子类中重写的方法,但是对象是父类的对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马