1
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;
}

输出:类名:package.name.here .B

有人能告诉我为什么匿名类类型在 getClass() 方法中给出封闭类吗?这会导致对象 C 上的 .equals() 一直失败。我的理解是因为 getClass 给出了封闭的类名,所以永远不会调用覆盖的 equals ?

4

2 回答 2

1

输出是Class Name: class nz.test.anon.B$1美元符号很重要。B$1 表示 B 下的第一个匿名类。 B$2 是第二个,依此类推。

也正在调用equals方法

System.out.println( "This is true: " + b.createClassC().equals(b) );
System.out.println( "and so is this: " + b.createClassC().equals(this) );
于 2013-08-16T01:44:08.747 回答
1

不知道你是如何运行你的代码的。需要注意的几点如下 -

  • 首先,如果 main() 方法在哪里?你的程序是如何开始的?必须有一个

public static void main(String args[])

项目中的方法。

  • 其次看你的方法

    public C createClassC(){ C c = new C(){ @Override public boolean equals( Object other ){ return true; }
    }; }

函数签名规定它应该返回 C 类(或其子类)的对象,但我没有看到这样的返回语句。你必须return c;

最后,您的代码输出是Class Name: class nz.test.anon.B$1其中 B$1 表示匿名类。

于 2013-08-16T04:18:17.697 回答