先看一段 Python
代碼
實作效果是子類和父類共用一個
sayHello()
方法,通過覆寫屬性 name
輸出不同的屬性 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代碼
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()
方法
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