注意匿名对象和匿名内部类完全不是一个东西!!
public class A {
public void show(){
System.out.println("aaa....");
//new B(){};
new B();
}
class B{
public void show(){
System.out.println("bbb...");
}
}
}
这里 new B() 是个匿名对象,和匿名内部类没关系。生成的.class文件如下:
A$B.class表示的是成员内部类B。
public class A {
public void show(){
System.out.println("aaa....");
new B(){};
//new B();
}
class B{
public void show(){
System.out.println("bbb...");
}
}
}
这里 new B(){} 其实是个匿名内部类。生成的.class文件如下:
A$1.class表示的是匿名内部类,因为没有名字就用数字1,2..表示。
两者的区别就是一个大括号,如果不注意很容易犯错。
匿名内部类是一种局部内部类(在一个方法里面定义的内部类),在java中语句必须写在方法里,匿名
内部类其实就是一条特殊的语句。
new B() 只是一个匿名对象,和内部类没关系
new B(){} 是个匿名内部类
上面两条语句都必须放在某个方法中