Java匿名类的类名
输出: 类名:package.Name.here.BJava匿名类的类名,java,methods,overriding,anonymous-inner-class,Java,Methods,Overriding,Anonymous Inner Class,输出: 类名:package.Name.here.B 有人能告诉我为什么匿名类类型在getClass()方法中给出封闭类吗?这会导致对象C上的.equals()一直失败。我的理解是,由于getClass提供了封闭的类名,因此永远不会调用重写的equals?输出是类名:class nz.test.anon.B$1美元符号很重要。B$1表示B下的第一个匿名类。B$2表示第二个匿名类,依此类推 还调用了equals方法 Class A{ public void test(){ B b = n
有人能告诉我为什么匿名类类型在getClass()方法中给出封闭类吗?这会导致对象C上的.equals()一直失败。我的理解是,由于getClass提供了封闭的类名,因此永远不会调用重写的equals?输出是
类名:class nz.test.anon.B$1
美元符号很重要。B$1表示B下的第一个匿名类。B$2表示第二个匿名类,依此类推
还调用了equals方法
Class A{
public void test(){
B b = new B();
System.out.println( "Class Name: " + b.createClassC().getClass() );
}
}
Class B{
public C createClassC(){
C c = new C(){
@Override
public boolean equals( Object other ){
return true;
}
};
}
}
Class C{
int val = 8;
}
不知道如何运行代码。须注意的事项如下:
- 首先,如果所有的main()方法都在哪里?你的计划是如何开始的? 一定有
publicstaticvoidmain(字符串args[])
方法
- 其次,看看你的方法
公共C createClassC(){
C=新的C(){
@凌驾
公共布尔等于(对象其他){
返回true;
}
}; }
返回c代码>
最后,代码的输出是类名:Class nz.test.anon.B$1
,其中B$1表示匿名类。它不是这样输出的。它输出package.name.here.B$1
,$1
表示它是一个匿名类。杜普:@jahroy它就像一个。问题是假设的输出不是实际的输出。你知道有一个官方的引用明确说明了匿名类的命名吗?
System.out.println( "This is true: " + b.createClassC().equals(b) );
System.out.println( "and so is this: " + b.createClassC().equals(this) );