问题描述
解决方案
分析原因:因为父类定义了name,子类如果直接继承Person类就自动也拥有了属性name。
但是子类也定义了一个相同名称的name属性,那么子类Person对象本质上就有了两个name属性,一个是自己的,一个是父类的,这两个同名属性都会在类实例化时分配空间。
shout方法中打印的是父类的name属性,所以结果就是person.
如果想要有多态特性,根据实际的类型打印对应的name属性,那么需要去掉Student类中的name定义。修正代码如下:
public class Student extends Person{
// String name = "student";
String school = "school";
public Student(){
this.name = "student";
}
public static void main(String[] args) {
Person p = new Student();
p.shout();
}
}
这样打印的就是子类的name了。
解决方案二:
子类中并没有shout方法,所以去父类中找到shout方法并输出name,,肯定是父类中的name
时间: 2024-10-06 17:25:12