class A{}
class B {
   public static void main(String s[]){
          Class cl=new A(){}.getClass();
              System.out.println(cl.getName());
   }
}
在B中创建了一个匿名内部类,他继承A,为什么结果是B?
class A{}
class B {
   public static void main(String s[]){
          Class cl=new A().getClass();
              System.out.println(cl.getName());
   }
}
结果是A,这个能理解
谁给解释一下,

解决方案 »

  1.   

    第一个的结果并不是B,而是B$1,如果你再写一个 
        Class c2=new A(){}.getClass();
        System.out.println(c2.getName());
    则输出为B$2。再进一步,你再一模仿A写一个class C,执行同样的操作,会得到B$3。我觉得可能后面“$”可能是用来标记内部类,1、2,3则表示的是第几个内部类。
      

  2.   

    你确认你运行的就是B.class?
    直接在命令行运行 java B 试试
      

  3.   

    dbyang() ( ) 信誉:100 
    解释得完全正确
      

  4.   

    dbyang()的解释对,我是想知道
    看getClass()解释
    class A{}
    class B {
       public static void main(String s[]){
              Class cl=new A(){}.getClass();
                  System.out.println(cl.getName());
       }
    }
    的结果我决的应该是A
    谁能解释一下原理吗,谢谢!!
      

  5.   

    class A{}
    class B {
       public static void main(String s[]){
              Class cl=new A().getClass(); //这样就A了。
                  System.out.println(cl.getName());
       }
    }
      

  6.   

    java里面内部类的标识都是这样子的,如果是B类中的内部类,那么会用“B$”加上内部类的类名来标识,例如B类中有内部类A那么就用B$A来表示该内部类,如果内部类是匿名的那么就会用B$1,B$2...来表示第一个匿名内部类,第二个匿名内部类...
      

  7.   

    Class cl=new A(){}.getClass();
    和Class cl=new A().getClass();的区别在于后面增加了{}在编译过程中,可以在{}中增加新的函数或重载已有的接口,所以
    在new A() {} 的时候生成的类并不是A,而应该认为是对A作了扩展的
    匿名子类,所以使用getClass()时输出为B$1
    在awt/swing事件处理中常用到类似的写法而使用new A()时生成的确实是A,所以会输出A.