父類 Person 有 name 字段與 toString() 返回 getName()。子類 Student、Worker 又各自定義了同名 name 字段,但未重寫 getName()。運行時輸出全為 null。
private String name; 遮蔽了父類字段(字段不具備多態性)。Person.toString() 調用 this.getName(),因子類未重寫,實際調用父類 getName(),返回父類 name(默認 null)。name,父類 name 從未被賦值。super(name)。getName() 返回自己的 name。toString() 直接訪問自己的 name。class Student extends Person {
// 刪除 private String name;
public Student(String name) { super(name); }
public void study() { System.out.println("學生在學習"); }
}
字段不參與多態,避免父子類同名字段。 若需擴展屬性,應通過方法覆寫實現,而非字段遮蔽。