转摘Java实例属性覆写问题
睢娴婉阅读量 17
先看一段Python代码
实现效果是子类和父类共用一个 sayHello()
方法,通过覆写属性name
输出不同的属性
prism language-python
class Parent():
name = "parent"
def getName(self):
return self.name
def sayHello(self):
print(self.name, "-", self.getName())
class Child(Parent):
name = "child"
if __name__ == "__main__":
parent = Parent()
print(parent.getName())
parent.sayHello()
child = Child()
print(child.getName())
child.sayHello()
输出效果满足预期要求
parent
parent - parent
child
child - child
再来看Java代码
prism language-java
class Parent {
private String name = "parent";
public String getName() {
return name;
}
public void sayHello() {
System.out.println(name + " - " + getName());
}
}
class Child extends Parent {
private String name = "child";
}
public class Demo {
public static void main(String[] args) {
Parent parent = new Parent();
System.out.println(parent.getName());
parent.sayHello();
Child child = new Child();
System.out.println(child.getName());
child.sayHello();
}
}
输出结果和预期不一样
parent
parent - parent
parent
parent - parent
修改一下子类,覆写父类的getName()
方法
prism language-java
class Parent {
private String name = "parent";
public String getName() {
return name;
}
public void sayHello() {
System.out.println(name + " - " + getName());
}
}
class Child extends Parent {
private String name = "child";
// 增加方法覆写
@Override
public String getName() {
return name;
}
}
public class Demo {
public static void main(String[] args) {
Parent parent = new Parent();
System.out.println(parent.getName());
parent.sayHello();
Child child = new Child();
System.out.println(child.getName());
child.sayHello();
}
}
输出结果看到,通过覆写方法获取属性的方式可以获取子类属性,直接获取的属性还是父类中的属性
parent
parent - parent
child
parent - child
===========================
【来源: 51CTO】
【作者: 彭世瑜】
【原文链接】 https://blog.51cto.com/mouday/3044416
声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。
标签:
0/300
全部评论0