java - Java 匿名类的类名

标签 java methods 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 永远不会被调用?

最佳答案

输出是类名: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) );

关于java - Java 匿名类的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18264422/

相关文章:

java - 如何在 Java 中将静态类作为参数传递

java - 在 Linux 上安装 Java EE SDK 时出现问题

c# - 命名空间不能直接包含字段或方法等成员吗?

java - 添加 "synchronized"会影响方法覆盖吗?

swift - 努力理解 Swift 3 用非可失败初始化器覆盖可失败初始化器

Javascript:如何覆盖某些类中的公共(public)方法?

java - 使用循环最佳实践创建 StringBuilder

JAVA JSch连接CISCO设备65XX路由器

javascript - 我应该绑定(bind)内置的 React 方法吗?

javascript - 如何 "fluent API"(也调用 "chaining")?