【问题标题】:What is the object type of an anonymous class匿名类的对象类型是什么
【发布时间】:2018-01-22 09:53:46
【问题描述】:

请看下面的Java类:

 class A {
   public void doProcess(){
      System.out.println("Process from A class!");
   }
 }

 class B extends A {
   @Override
   public void doProcess(){
      System.out.println("Process from B class!");
   }
 }

如上所示,我有 2 个课程。如果我要执行以下操作(匿名类)

 new B() {
   @Override
   public void doProcess(){
      System.out.println("Process from Anonymous class");
   }        
 }

我是在创建 B 的新子类吗?还是B的一个实例?

我知道我可以将匿名实现分配给 B 或 A。我不确定的是在创建的匿名类的实例上。更多关于 Java 所做的事情的好奇心比任何实际目的。我不知道如何让这个匿名内部类的类对象使用一些反射 API 并自己弄清楚。

【问题讨论】:

  • B..的子类
  • 感谢@EpicPandaForce。您还可以帮助我如何(使用反射 API 或其他东西)发现它是 B 的子类吗?
  • 为什么?它是。你写的代码就是这个意思。
  • @InfiniteLoop 您可以将它的一个实例分配给 B 类型的变量 B b = new B() { ...}。您可以检查 b.getClass() != B.class 以查看它不是 B 的实例。

标签: java anonymous-class


【解决方案1】:

您正在创建类B 的匿名子类的实例。

B b = new B() {
   @Override
   public void doProcess(){
      System.out.println("Process from Anonymous class");
   }        
}
System.out.println (b.getClass ().getSuperclass ());

这将打印出来

class some.package.B

其中some.package是B类所在的包。

【讨论】:

  • 另外:b instanceof B 将评估为true,但b.getClass().equals(B.class) 将评估为false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多