Den*_*hel 5 java null nullpointerexception super superclass
我正在使用Java 7并获得3个类:
TestSuper.java
public abstract class TestSuper {
public TestSuper() {
testMethod();
}
protected abstract void testMethod();
}
Run Code Online (Sandbox Code Playgroud)
TestNull.java
public class TestNull extends TestSuper {
private String test = "Test";
public TestNull() {
super();
System.out.println(test);
}
@Override
protected void testMethod() {
System.out.println(test);
}
}
Run Code Online (Sandbox Code Playgroud)
TestMain.java
public class TestMain {
public static void main(String[] args) {
new TestNull();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
null
Test
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况并且有一个很好的解决方法呢?
当你调用new TestNull();你正在调用类的构造函数时TestNull,它调用super()构造函数:它包含对实现的方法的调用,在TestNull那里打印String字段,此时子类的字段TestNull尚未初始化,即为空.
在超级构造函数调用之后,将初始化所有字段,因此第二个打印实际上显示(初始化)字符串的新值.
这里的关键点是在超类的实例化之后初始化子类的字段.
解决方法?这取决于你想要的确切行为:也许在超级构造函数中调用抽象方法是有意义的(即在TestSuper类的构造函数中).
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |