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