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;
}
}