父类
public class Father {
public Father(){
protected_method(0);
protected_method(1);
}
public Integer protected_method(int i){
Integer integer= new Integer(i);
return integer;
}
}
子类
public class Child extends Father {
public Integer[] integers= new Integer[2];
public Child(){
super();
}
public Integer protected_method(int i){
Integer integer= new Integer(i);
integers[i]= integer;
return integer;
}
}
子类在构造的时候会出错
Exception in thread "main" java.lang.NullPointerException
integers是null array
如果integers不是数组的话就不会报错
public class Main {
public static void main(String[] args) {
Child c= new Child();
}
}
如果integers不是数组的话就不会有问题
Father f=new Child();
而且数组长度为0时为空数组 null,就是空指针了
我发现问题是因为 public Integer[] integers= new Integer[2];这句是在构造函数里的super();之后执行的。所以是null array,但是一个android的程序结构就是这样,有没有什么办法能够实现protected_method这个方法里访问数组?
按照你这个思路感觉执行顺序是定死的,所以肯定会出现null array的情况,如果只是想父类调用子类的方法,是不是可以尝试不在构造方法里就调用
现象是:new Child时先调用父类构造方法,父类构造中再重写的子类的方法,此时子类的变量还没有初始化,子类的构造方法还没有运行。
public Child(){
super(); ------------》也可以去掉
}
方法具有多态性,子类在调用父类方法时,父类方法中的protected_method方法执行子类中的方法,但是由于子类初始化在父类初始化之后,所以子类的integers还是null
,因此在执行 integers[i]= integer;时会抛出空指针异常