Доступ к переменной в подклассе через метод суперкласса (Java)

#java #methods #superclass

#java #методы #суперкласс

Вопрос:

Я создаю два класса: Person и namedPerson . Person является суперклассом namedPerson . Мне нужен метод printPerson для распечатки имени и фамилии a namedPerson , но Person я могу получить только последнее имя и namedPerson получает как имя, так и фамилию. Мой код выглядит следующим образом:

 public abstract class Person {

   String Lastname;
   String Name;

   public Person(String Lastname){
     this.Lastname = Lastname;
   }

   public void printPerson() {
     System.out.println("Name: "   Name);
     System.out.println("Last name: "   Lastname);
   }
  

Вот namedPerson :

 public class namedPerson extends Person {

   String Lastname;
   String Name;

   public namedPerson(String Lastname){
     super(Lastname);
     this.Name = "Bob";
   }
  

Когда я делаю следующее:

 namedPerson Bob = new namedPerson("Smith");
Bob.printPerson();
  

Я получаю:

 Name: null
Last name: Smith
  

Когда мне нужно получить:

 Name: Bob
Last name: Smith
  

Спасибо за помощь!

Комментарии:

1. Поскольку namedPerson также имеет Lastname , и Name вы можете просто удалить эти поля для этого класса и вызвать суперконструктор следующим образом: super(Lastname, "Bob") ; это уменьшает избыточность в вашем коде. Я бы также рекомендовал придерживаться соглашений об именовании и использовать имена классов, начинающиеся с прописной буквы ( NamedPerson ), и имена полей, начинающиеся со строчной буквы ( lastname , name ) .

Ответ №1:

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

Все, что вам нужно сделать, это удалить их из подкласса:

 public class namedPerson extends Person {

   public namedPerson(String Lastname){
     super(Lastname);
     this.Name = "Bob";
   }
}
  

Ответ №2:

Попробуйте это:

     public abstract class Person {

    String Lastname;
    

    public Person(String Lastname) {
        this.Lastname = Lastname;
    }

    public void printPerson() {
        System.out.println("Last name: "   Lastname);
    }

    public static void main(String[] args) {
        NamedPerson namedPerson = new NamedPerson("firstName", "Name");
        namedPerson.printPerson();
    }
}

class NamedPerson extends Person {

    String name;

    public NamedPerson(String Lastname, String name) {
        super(Lastname);
        this.name = name;
    }

    @Override
    public void printPerson() {
        super.printPerson();
        System.out.println("Name: "   name);
    }
}