class A{}
class B {
public static void main(String s[]){
Class cl=new A(){}.getClass();
System.out.println(cl.getName());
}
}
在B中创建了一个匿名内部类,他继承A,为什么结果是B?
class A{}
class B {
public static void main(String s[]){
Class cl=new A().getClass();
System.out.println(cl.getName());
}
}
结果是A,这个能理解
谁给解释一下,
class B {
public static void main(String s[]){
Class cl=new A(){}.getClass();
System.out.println(cl.getName());
}
}
在B中创建了一个匿名内部类,他继承A,为什么结果是B?
class A{}
class B {
public static void main(String s[]){
Class cl=new A().getClass();
System.out.println(cl.getName());
}
}
结果是A,这个能理解
谁给解释一下,
解决方案 »
- 哪位有关于Jfreechart柱状图下探(就是带超链接的)实现代码和view 分开的。急需 谢谢大家帮忙
- 浅谈java中的代理
- java socket 编程问题 急~~~~~
- 急问FRAME程序如何发布?
- java中内存格局
- 面试题:声明一个委托public int myCallBack(int x),则该委托产生的回调方法的原型是?
- 初学者请教一个JAVA简单问题,关于坐标Point的问题
- 如何在网页源码中找到想要的部分?
- Java编程中常见的设计范式???
- Win2000菜单的淡入淡出效果真是太好看了,你会吗?
- 求一个正则表达式
- windows和hp-unix上的时间转化为什么得到不同结果
Class c2=new A(){}.getClass();
System.out.println(c2.getName());
则输出为B$2。再进一步,你再一模仿A写一个class C,执行同样的操作,会得到B$3。我觉得可能后面“$”可能是用来标记内部类,1、2,3则表示的是第几个内部类。
直接在命令行运行 java B 试试
解释得完全正确
看getClass()解释
class A{}
class B {
public static void main(String s[]){
Class cl=new A(){}.getClass();
System.out.println(cl.getName());
}
}
的结果我决的应该是A
谁能解释一下原理吗,谢谢!!
class B {
public static void main(String s[]){
Class cl=new A().getClass(); //这样就A了。
System.out.println(cl.getName());
}
}
和Class cl=new A().getClass();的区别在于后面增加了{}在编译过程中,可以在{}中增加新的函数或重载已有的接口,所以
在new A() {} 的时候生成的类并不是A,而应该认为是对A作了扩展的
匿名子类,所以使用getClass()时输出为B$1
在awt/swing事件处理中常用到类似的写法而使用new A()时生成的确实是A,所以会输出A.