通过超类方法(Java)访问子类中的变量
我正在构建两个类:通过超类方法(Java)访问子类中的变量,java,methods,superclass,Java,Methods,Superclass,我正在构建两个类:Person和namedPersonPerson是namedPerson的超类。我需要方法printPerson打印出namedPerson的名字和姓氏,但是Person只能接收姓氏,namedPerson同时接收名字和姓氏。我的代码如下: public abstract class Person { String Lastname; String Name; public Person(String Lastname){ this.Lastna
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);
}
下面是名为person的:
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);
}
}
由于namedPerson
还具有Lastname
和Name
,因此您可以删除此类的这些字段,并像这样调用超级构造函数:super(Lastname,“Bob”)
;这减少了代码中的冗余。我还建议遵循命名约定,使用以大写字母(NamedPerson
)开头的类名和以小写字母(lastname
,name
)开头的字段名。