黑马程序员技术交流社区
标题:
关于匿名内部类的问题
[打印本页]
作者:
orgcheng
时间:
2015-9-19 15:58
标题:
关于匿名内部类的问题
public class Solution {
public static void main(String[] args) {
// 1
new Object(){
void show(){
System.out.println("show run 1");
}
}.show();
// 2
Object obj = new Object(){
void show(){
System.out.println("show run 2");
}
};
obj.show();
}
}
复制代码
1和2的写法正确吗?有什么区别?说明原因。
作者:
leixing1012
时间:
2015-9-19 15:58
本帖最后由 leixing1012 于 2015-9-19 19:47 编辑
写法是正确,1和2都是在通过匿名内部类建立一个Object类的子类对象。
区别:
第一个可是编译通过,并运行。
第二个编译失败,因为匿名内部类是一个子类对象,当用Object的obj引用指向时,父类(Object)引用指向子类(匿名内部类)对象。obj被提升为了Object类型的引用,而编译时检查obj的类型Object类中是否有show方法,而Object没有show方法,所以编译失败。
作者:
liudongcan
时间:
2015-9-19 19:03
有区别,第一个写法的对象只能使用一次。第二中写法可以调用多个方法
作者:
菊花爆满山
时间:
2015-9-19 21:11
楼上2位朋友 加在一起就是我想说的
作者:
liudongcan
时间:
2015-9-20 13:18
leixing1012 发表于 2015-9-19 15:58
写法是正确,1和2都是在通过匿名内部类建立一个Object类的子类对象。
区别:
第一个可是编译通过,并运行。 ...
厉害,这也就是老师说的多态的弊端
作者:
heshiwei
时间:
2015-9-21 15:49
确实如答案所说,第二种写法是错误的,因为obj是父类的对象,只能访问object原有的方法,而show在子类,所以无法访问。
除去2中以上错误。1和2的区别是:1.一次性的 2.可以反复使用
作者:
往事如风555
时间:
2015-9-28 22:18
谢谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2