如果可以将 A 声明为抽象,则可以这样做。
public abstract class A {
protected int[] array;
public void someMethod() {
int[] array = getArray();
variable = array.length;
}
protected abstract int[] getArray();
}
public class B extends A {
public int[] getArray() {
if(array == null){
array = new int[] { 1,2,3 };
}
return array;
}
}
尽管如此,您不应将 A 用作从某个子类初始化的变量持有者。这可能会使开发人员感到困惑,因为他们可能不知道调用哪个方法来初始化数组,因为他们可能不知道所有子类。
更好的方法是只使用抽象方法。
public abstract class A {
public void someMethod() {
int[] array = getArray();
variable = array.length;
}
protected abstract int[] getArray();
}
public class B extends A {
private int[] array;
public int[] getArray() {
if(array == null){
array = new int[] { 1,2,3 };
}
return array;
}
}