Java匿名类的类名

时间:2013-08-16 01:27:34

标签: java methods method-overriding anonymous-inner-class

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?

2 个答案:

答案 0 :(得分: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) );

答案 1 :(得分:0)

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

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

public static void main(String args[])

项目中的

方法。

  • 其次,请参阅您的方法

    public C createClassC(){      C c = new C(){        @覆盖        public boolean equals(Object other){          返回true;        }
         };    }

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

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