继承方法给我空值

时间:2016-08-30 11:12:49

标签: java inheritance

我有三个名为ChildClass,BaseClass和Student的类。 ChildClass扩展了BaseClass。我的ChildClass继承了一个名为dipslayName()的方法,该方法应该打印学生的名字,但它给了我null值。如果我在ChildClass中评论学生对象,它工作正常。

package com.techmahindra;

public class ChildClass extends BaseClass{
    Student student = new Student();

    public static void main(String[] args) {
        ChildClass child = new ChildClass();
        child.displayName();
    }

    /*public void displayName(){
        setName();
        System.out.println(student.getName());
    }*/
    public void setName(){
        student.setName("Mahesh");
    }
}

这是另一个类:

package com.techmahindra;

import com.techmahindra.Student;

public class BaseClass {
    Student student = new Student();
    public void displayName(){
        setName();
        System.out.println(student.getName());
    }
    public void setName(){
        student.setName("santhosh");
    }
}

这是另一个类:

package com.techmahindra;

public class Student {
    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

2 个答案:

答案 0 :(得分:1)

setName()中的ChildClass方法设置了ChildClass中宣布的学生姓名。
displayName()显示学生在BaseClass内声明的姓名 因此,删除ChildClass中student的声明,setName方法将设置正确学生的名称。

在您的ChildClass中,您注释掉了重写的方法displayName。这将正确显示学生在ChildClass中声明的名称。

这两个类包含一个具有相同名称的变量的事实会产生一些混淆。

答案 1 :(得分:-1)

我给出了不同的引用名称,这就是它的思考方式。所以在这里我试着叫student1的名字而不是student2。如果我们为引用提供相同的名称,会发生这种情况;)

package com.techmahindra;

public class ChildClass扩展BaseClass {     学生student2 =新学生();

public static void main(String[] args) {

    ChildClass child = new ChildClass();
    child.displayName();
}

/*public void displayName(){
    setName();
    System.out.println(student.getName());
}*/

public void displayName(){   //this method is inherited and not present in this class

    setName();
    System.out.println(student1.getName());
}

public void setName(){
    student2.setName("Mahesh");
}

}