Java匿名类的类名

Java匿名类的类名,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

输出: 类名: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 = 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(或它的子类)的对象,但我看不到这样的返回语句。您必须
返回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) );