gpt4 book ai didi

Java抽象类异常行为

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:04 26 4
gpt4 key购买 nike

抽象类:

   public abstract class ParentClass {
private static ParentClass mpParentClass;

public ParentClass() {
mpParentClass = this;
}

public abstract void method1();

public static ParentClass getInstance() {
return mpParentClass;
}
}

子类:

public class ChildClass extends ParentClass{
@Override
public void method1() {
System.out.print("ChildClass class method");
}
}

测试类:

public class TestClass {
public static void main(String[] args) {
ChildClass cl = new ChildClass();
ParentClass.getInstance().method1();
}
}

这里我创建了一个抽象类和一个扩展父抽象类的子类。

父抽象类持有对自身实例的引用,并通过静态方法返回实例。

在测试类中,如果我不创建 ChildClass 的对象,java 会抛出 NullPointerException。

但是在创建了ChildClass的对象之后,查询ParentClass的实例并调用抽象方法,调用的是ChildClass实现的方法。

我无法理解这种行为。请任何人解释。

最佳答案

第一次实例化 ChildClass 时,您使用 parentClass 的默认构造函数,它使用 ChildClass 类型实例化私有(private)字段。如果您不这样做,则私有(private)字段 mpParentClass 不会实例化。所以你有一个 NullPointerException

关于Java抽象类异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32140220/

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