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();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道抽象类无法实例化,但在此代码上混淆.实际上这段代码是什么意思?
Spo*_*ted 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"
}
}
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 14
这称为匿名内部类.您没有实例化抽象类,而是实例化扩展抽象类的具体匿名内部类.当然,为了允许这种情况,匿名内部类必须为抽象超类的所有抽象成员提供实现...在这种情况下它是这样做的,因为抽象超类没有抽象成员.
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |