在一次面试中,有人问你是否可以实例化一个抽象类。传统上,你会回答“不”。然而,令你惊讶的是,面试官说这是可能的。
为了演示这一点,请考虑以下代码:
abstract class my { public void mymethod() { System.out.print("Abstract"); } } class poly { public static void main(String a[]) { my m = new my() {}; m.mymethod(); } }
尽管 my 上有抽象修饰符,但您可以使用以下命令创建它的实例一个匿名子类。您实质上是动态创建一个子类,并将其引用分配给抽象类引用 m。
根据 Java 语言规范 (JLS):
“如果类实例创建表达式以类体结尾,那么
被实例化的类是匿名类。”
所以,在这种情况下,被实例化的类不是匿名类。 my,但是一个匿名子类。
可以通过编译代码并检查生成的类文件来确认此行为。您会注意到一个名为 Poly$1.class 的新类文件,它对应于运行时创建的匿名子类。
因此,虽然您无法直接实例化抽象类,但可以通过创建匿名子类。
以上是Java中抽象类可以实例化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!