gpt4 book ai didi

java - 创建抽象类的对象!=实例化抽象类?

转载 作者:行者123 更新时间:2023-12-01 16:36:00 25 4
gpt4 key购买 nike

我了解到我们无法实例化抽象类。但今天我测试了一些代码,我感到很困惑。

package MainPackage;

abstract class abstractClass {
abstract abstractClass a_function();
}

public class Src {
abstractClass m;
public abstractClass abstractClassTest() {
return m.a_function();
}
public static void main(String args[]) {
System.out.println("Hello world!");
}
}

这里我创建了一个抽象类abstractClass并在abstractClassTest()函数中返回它。并且编译成功,没有错误! IMO 在返回某些东西之前,计算机应该创建该类型的对象。在这里它应该在返回 m.function() 之前创建一个 abstractClass 对象,我无法理解。我认为我们无法实例化抽象类意味着我们无法创建抽象类的对象或者我们无法新建一个类(例如 abstractClass m = new abstractClass() is illegal )。但从上面的代码来看,我们似乎可以创建一个抽象类的对象。怎么能实现呢?代码abstractClass m ,当计算机看到代码时会做什么?我们不能说java已经实例化了抽象类m代码 abstractClass m ?如果java不实例化类abstractClass ,它如何返回 abstractClass 的对象在代码中abstract abstractClass a_function();

最佳答案

是的,它应该编译没有错误。但是,如果您曾经调用过abstractClassTest,它会在执行时抛出NullPointerException,因为您从未初始化过m变量来引用实际实例。为此,您必须创建一个具体类,它是您的抽象类的子类。

例如:

public class ConcreteClass extends AbstractClass {
@Override AbstractClass a_function() {
return this;
}
}

public class Src {
private AbstractClass m = new ConcreteClass();

public AbstractClass abstractClassTest() {
return m.a_function();
}
public static void main(String args[]) {
new Src().abstractClassTest();
}
}

请注意,代码中没有任何内容创建抽象类的实例。仅仅因为您拥有该类型的变量并不意味着已经创建了该类型的对象

关于java - 创建抽象类的对象!=实例化抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com