abstract class A {
public void disp() {
System.out.print("Abstract");
}
}
public class B {
public static void main(String args[]) {
A object = new A(){ };
object.disp();
}
}
我知道抽象类无法实例化,但对此代码感到困惑。 实际上这段代码是什么意思?
答案 0 :(得分:30)
这里的细微之处在于" {}"。这意味着您显式为抽象类A
的缺失部分(缺少部分是抽象方法)提供匿名实现,允许您实例化它。
但A
中没有抽象方法,因此匿名实现为空。
使用至少一个抽象方法显示行为的示例:
public abstract class A {
public abstract void bar();
public void disp() { System.out.print("Abstract"); }
}
public class B {
public static void main(String args[]) {
A object = new A() {
@Override public void bar() { System.out.print("bar"); }
};
object.disp(); //prints "Abstract"
object.bar(); //prints "bar"
}
}
答案 1 :(得分:14)
这称为匿名内部类。您没有实例化抽象类,而是实例化扩展抽象类的具体匿名内部类。当然,为了允许这种情况,匿名内部类必须为抽象超类的所有抽象成员提供实现......在这种情况下它是这样做的,因为抽象超类没有抽象成员。