Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过超类方法(Java)访问子类中的变量_Java_Methods_Superclass - Fatal编程技术网

通过超类方法(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
)开头的字段名。