System.out.println(dog1.getName());返回null

问题描述 投票:0回答:3

dog1.setName("rex")未将值"rex"分配给name,而是返回null为什么会这样?

public class Program3a {
    private  String name;

    public  String getName() {
        return name;
    }      

    public void setName(String name) {
        name = "unassigned";
    }
}

public class Program3aTest extends Program3a{
    public static void main(String[]args) {
        Program3aTest dog1 = new Program3aTest();
        dog1.setName("rex");

        System.out.println(dog1.getName());

    }
}
java logic
3个回答
0
投票

在类Program3a中设置名称时出错。应该有this.name = name而不是name =“ unssigned”。因此,请替换此语句。因为name的初始值为默认构造函数设置的null。您必须将其分配给参数名称,该名称是Program3aTest类的输入。这是显示“ rex”的代码。

public class Program3a {
    private  String name;

   /* public Program3a(String name) {
        setName(name);
    }*/

    public  String getName() {
        return name;
    }      

    public void setName(String name) {
        this.name = name;      // change this statement in your code
    }



}

public class Program3aTest extends Program3a{
    public static void main(String[]args) {
        Program3aTest dog1 = new Program3aTest();
        dog1.setName("rex");

        System.out.println(dog1.getName());

    }
}

0
投票

像这样更改Program3a类:

public class Program3a {
    private  String name = "unassigned";

    public  String getName() {
        return name;
    }      

    public void setName(String name) {
        this.name = name;
    }
}

0
投票

简而言之,您的“ getter”返回的是您赋予它的变量值-> string(type)变量名=“ unssigned”。您将始终告诉它将名为“ name”的变量设置为未分配的字符串。试试这个

public void setName(String name) {
    this.name = name;
}

此外,您还希望创建一个构造函数并使之整体上更高效(构造函数可以摆脱设置方法,而不能摆脱设定方法)。完整:

public class Main {
    public static void main(String[] args){

    Program3a testClass = new Program3a();

    testClass.setName("Rex");
        System.out.println(testClass.getName());
    }
}

public  class Program3a {
    private  String name;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

或外观更好的构造函数

public Program3a(String name) {
    this.name = name;
}

这当然需要您更新测试人员的课程(我使用main)。

    Program3a testClass = new Program3a("Rex");

    System.out.println(testClass.getName());

构造函数会自动创建为幻影。被覆盖可以吸收变量的参数并减少不必要的编码。创建该类后,您可以使用行Program3a testClass = new Program3a("Rex");创建一个新类。 Rex现在自动填充变量Named,并在调用testClass.getName()之前继续使用此值,直到更改为止。

© www.soinside.com 2019 - 2024. All rights reserved.