子が「子」を出力しない理由は、javaの継承では、フィールドではなくメソッドのみが継承されるためです。変数output
は子によってオーバーライドされません。
あなたはこのようにそれを行うことができます:
public class Parent {
private String parentOutput = "hallo";
String getOutput() {
return output;
}
public void print() {
System.out.println(getOutput());
}
}
public class Child extends Parent {
private String childOutput = "child";
String getOutput() {
return output;
}
}
また、String変数は別の名前である必要はありませんが、わかりやすくするためにここで名前を変更しました。
もう1つの、より読みやすい方法は、これを行うことです。
public class Parent {
protected String output;
public Parent() {
output = "hallo";
}
public void print() {
System.out.println(output);
}
}
public class Child extends Parent {
public Child() {
output = "child";
}
}
この例では、変数はです。これprotected
は、親と子の両方から読み取ることができることを意味します。クラスのコンストラクターは、変数を目的の値に設定します。この方法では、print関数を1回だけ実装し、オーバーライドされたメソッドを複製する必要はありません。