问题描述
我正在构建两个类:Person
和namedPerson
。 Person
是namedPerson
的超类。我需要方法printPerson
来打印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
感谢您的帮助!
解决方法
这是因为您要在子类中重新声明实例变量Lastname和Name,这是没有意义的,因为您已经从超类继承了它们。
您要做的就是将它们从子类中删除:
public class namedPerson extends Person {
public namedPerson(String Lastname){
super(Lastname);
this.Name = "Bob";
}
}
,
尝试一下:
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);
}
}