通过超类方法Java访问子类中的变量

问题描述

我正在构建两个类:PersonnamedPersonPersonnamedPerson的超类。我需要方法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);
    }
}