#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);
}
}