我们能实例化一个抽象类吗?

我们能实例化一个抽象类吗?

在我的一次面试中,有人问我“我们能否实例化一个抽象类?”

我的回答是“不,我们不能”。但是,面试官告诉我“错了,我们可以。”

我在这个问题上争论了一下。然后他让我自己在家试试。

abstract class my {
    public void mymethod() {
        System.out.print("Abstract");
    }}class poly {
    public static void main(String a[]) {
        my m = new my() {};
        m.mymethod();
    }}

在这里,我创建类的实例并调用抽象类的方法。有人能给我解释一下吗?我面试的时候真的错了吗?


慕的地6264312
浏览 407回答 3
3回答

万千封印

上面的实例是一个匿名内部类,它是my抽象类。它不完全等同于实例化抽象类本身。OTOH,每个子类实例都是其所有超类和接口的实例,因此大多数抽象类实际上都是通过实例化它们的一个具体子类来实例化的。如果面试官说错了!没有解释,并给出了这个例子,作为一个独特的反例,我认为他不知道他在说什么,尽管。

一只萌萌小番薯

只是你可以做的观察:为什么poly延展my?这没用.。汇编的结果如何?三个档案:my.class, poly.class和poly$1.class如果我们能够实例化这样的抽象类,我们也可以实例化一个接口.奇怪.。我们能实例化一个抽象类吗?不,我们不能。我们可以做的是创建一个匿名类(这是第三个文件)并实例化它。超类实例化怎么样?不实例化抽象超类。我们不过是爪哇。编辑:让他测试这个public static final void main(final String[] args) {     final my m1 = new my() {     };     final my m2 = new my() {     };     System.out.println(m1 == m2);     System.out.println(m1.getClass().toString());     System.out.println(m2.getClass().toString());}产出如下:falseclass my$1class my$2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java