2

新しいオブジェクトインスタンスからパラメータを取得してスーパークラスに流れ込み、スーパークラスのプライベートフィールドを更新する方法について混乱しています。

ですから、私は高度なJavaクラスに所属しており、「Person」スーパークラスとPersonを拡張する「Student」サブクラスを必要とする宿題があります。

Personクラスは学生名を格納しますが、Person名を受け入れるのはStudentクラスコンストラクターです。

変数メソッドを更新するPersonのメソッドがないと仮定します...subClassVar= setSuperClassVar();のように

元:

public class Person
{
     private String name; //holds the name of the person
     private boolean mood; //holds the mood happy or sad for the person
     private int dollars; //holds their bank account balance
}

class Student extends Person //I also have a tutor class that will extend Person as well
{
     private String degreeMajor //holds the var for the student's major they have for their degree

     Public Student(String startName, int startDollars, boolean startMood, String major)
     {
          degreeMajor = major;  // easily passed to the Student class
          name = startName; //can't pass cause private in super class?
          mood = startMood; //can't pass cause private in super class?
          dollars = startDollars; // see above comments
          // or I can try to pass vars as below as alternate solution...
          setName() = startName; // setName() would be a setter method in the superclass to...
                                 // ...update the name var in the Person Superclass. Possible?
          setMood() = startMood; // as above
          // These methods do not yet exist and I am only semi confident on their "exact"...
          // ...coding to make them work but I think I could manage.
     }   
}

宿題の説明は、私が許可されている人のスーパークラスにどれだけ変更できるかという点で少し曖昧だったので、業界で受け入れられている優れたソリューションにはスーパークラスの変更が含まれるとみなされている場合は、それを行います。

私が見るいくつかの可能な例は、Personクラスのプライベート変数を「保護」するか、personクラスにsetMethods()を追加してから、サブクラスでそれらを呼び出すことです。

また、サブクラスのコンストラクターパラメーターをスーパークラスに渡す方法に関する一般的な概念の教育も受けています...可能であれば、コードのコンストラクター部分でそれを実行してください。

最後に、検索を行いましたが、類似した質問のほとんどは本当に具体的で複雑なコードでした...上記の例のように簡単なものは見つかりませんでした...また、何らかの理由で、フォーラムの投稿ですべてのコードがまとめられませんでした上記の紛らわしい読み物をお詫び申し上げます。

皆さんありがとう。

4

1 に答える 1

5

まず、次のコンストラクターを定義する必要がありますPerson

public Person(String startName, int startDollars, boolean startMood)
{
    name = startName;
    dollars = startDollars;
    mood = startMood;
}

Student次に、以下を使用してコンストラクターからデータを渡すことができますsuper(...)

public Student(String startName, int startDollars, boolean startMood, String major)
{
    super(startName, startDollars, startMood);
    . . .
}

または、クラスでセッターを定義し、コンストラクターPersonから呼び出すこともできます。Student

public class Person
{
     private String name; //holds the name of the person
     private boolean mood; //holds the mood happy or sad for the person
     private int dollars; //holds their bank account balance

     public void setName(String name) {
         this.name = name;
     }
     // etc.
}
于 2012-10-18T00:17:41.827 に答える