【发布时间】:2020-11-21 07:45:04
【问题描述】:
在我的一次采访中,有人问我“我们是否可以实例化一个抽象类?”
我的回答是“不,我们不能”。但是,面试官告诉我“错了,我们可以。”
我对此进行了一些争论。然后他让我自己在家试试。
abstract class my {
public void mymethod() {
System.out.print("Abstract");
}
}
class poly {
public static void main(String a[]) {
my m = new my() {};
m.mymethod();
}
}
在这里,我正在创建我的类的实例并调用抽象类的方法。谁能给我解释一下?面试时我真的错了吗?
【问题讨论】:
-
虽然关系不大,但也许可以在 C++ 中实例化一个抽象类:如果从抽象类
B派生非抽象类B,在构造部分 的B实例,包括运行A的构造函数,对象的运行时类型实际上是A。不过只是暂时的。 -
@jWeavers:他给出的例子是完全错误的。你应该问他“那么抽象类有什么用”。如果要扩展它,那么为什么要创建扩展类的实例?这是一个全新的对象,你最终没有数据..
-
或者可能是面试官想检查你对他提出的陈述的信心!
-
他骗了你。当你没有指出这不是这段代码所做的并解释什么是匿名子类时,你就丢了球。他可能已经知道了,想看看你是否知道。
-
这不是智力竞赛节目,而是工作面试,对吧?那么如果 Java 或 C++ 允许实例化抽象类呢?你不会这样做,因为这不是一件聪明的事情。在 Objective-C 中,抽象类只是约定俗成的抽象类,实例化它们是一个 bug。
标签: java oop class object abstract