我有三个名为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;
}
}
答案 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");
}
}