как передать параметры подкласса в частные переменные суперкласса?


Я запутался в том, как получить параметры из новых экземпляров объекта, чтобы также перетекать в супер класс для обновления частных полей в супер классе.

Итак, я нахожусь в продвинутом классе Java, и у меня есть домашнее задание, которое требует суперкласса "Person" и подкласса "Student", расширяющего Person.

Класс Person хранит имя учащегося, но именно конструктор класса Student принимает имя учащегося.

Предположим, что нет метода лично, чтобы сделать переменный метод обновление...как 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.
     }   
}
Инструкции для домашнего задания были немного расплывчатыми с точки зрения того, сколько изменений в суперкласс личности мне разрешено сделать, поэтому, если вы все верите, что хорошее твердое решение, принятое в отрасли, включает в себя изменение суперкласса, я сделаю это.

Некоторые возможные примеры, которые я вижу, заключаются в том, чтобы сделать частные vars в классе Person "защищенными" или добавить setMethods() в класс person, а затем вызвать их в sub класс.

Я также открыт для обучения общей концепции о том, как передать параметры контструктора подкласса в суперкласс...и если возможно, сделайте это правильно в конструкторской части кода.

Наконец, я искал вокруг, но большинство подобных вопросов были действительно специфическим и сложным кодом....Я не мог найти ничего прямолинейного, как мой пример выше...кроме того, по какой-то причине сообщение на форуме не сгруппировало весь мой код вместе, так что извините за запутанное чтение выше.

Спасибо всем.

1 2

1 ответ:

Во-первых, вам нужно определить конструктор для 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.
}