【发布时间】:2015-01-05 18:42:32
【问题描述】:
我有一个抽象类和一个派生类。 查看提供的代码:-
public abstract class Parent{
public Parent(){
init();
}
public abstract void init();
}
public class Child extends Parent{
private String mTitle = null;
public Child(){
super();
System.out.println(mTitle.toString());
}
public void init(){
mTitle = "It' a test";
}
}
当我执行上面的代码时,它会在打印 mTitle 的值时抛出 NullPointerException。 如果你检查父类的构造函数中的代码,我调用了抽象方法,它将调用派生类的 init 方法, 在抽象方法中,我将 mTitle 值的值初始化为 ="It's a test";
调用父构造函数后派生类必须调用System.out.println。
如果它是这样做的,那么为什么它会抛出 NullPointerException。
但是,如果我只是离开 mTitle 的分配,它不会抛出异常,如:-
private String mTitle;
如果在调用类的结构时发生变量的初始化,并且我们知道默认情况下全局对象已初始化为空。 但是在这种情况下它不会抛出异常。
【问题讨论】:
-
@1owk3y 显然是一个错字。这甚至不能用
extenda编译,更不用说在运行时抛出NullPointerException。 -
另外,“Public”在定义类时不是合法关键字。此外,
init():不是法律声明,您可能想要一个;。请仔细检查您发布的代码是否实际上是您正在运行的代码。你的许多错别字引起了一些怀疑。 -
你在构造函数中调用了一个可覆盖的方法。这可能会产生意想不到的行为,不应该这样做。延伸阅读:stackoverflow.com/q/3404301/1407656
-
但是,如果我不会在类中分配 mTitle 的值并简单地写成这样:- private String mTitle;它不会抛出异常。
标签: java exception inheritance abstract