私はスーパークラスとたくさんのサブクラスを持っています。すべてのサブクラスで同じ名前のフィールドを1つ作成したいのですが、スーパークラスで定義したくないか、少なくともその値を使用したくありません。これは私が今持っているものです
public abstract class Big {
public String tellMe = "BIG";
public Big() {}
public void theMethod() {
System.out.println ("Big was here: " + tellMe() + ", " + tellMe);
}
public String tellMe() {
return tellMe;
}
}
public class Little extends Big{
public String tellMe = "little";
public Little(){}
public String tellMe() {
return "told you";
}
public static void main(String [] args) {
Little l = new Little();
l.theMethod();
}
}
Littleを実行すると、これが出力になります
ビッグはここにありました:あなたに言った、ビッグ
tellMeが「BIG」を指しているのに、なぜ「toldyou」が印刷されるのかわかりません。どうして両方が真実になることができますか?
私の問題は、メソッドtellMe()をBigに配置し、変数tellMe(実際に返される)をすべてのサブクラスで定義することです。これを機能させる唯一の方法は、私が書いたように、各サブクラスのtellMe()メソッドを書き直すことです。しかし、それは継承の目的全体を打ち負かしませんか?助けてください
編集:サブクラスでコンストラクターを使用していません。私が欲しいのは、すべてのサブクラスに設定できるフィールドと、それらの値を使用するスーパーのメソッドだけです。すべてのサブクラスがそれを実装しなければならないので、なぜこれが不可能なのか理解できません。それは理にかなっています...これが単に不可能な場合は、私に知らせてください