class Parent { String name = "Parent"; void print() { System.out.println("Parent"); } }
class Child extends Parent { String name = "Child"; void print() { System.out.println("Child"); } }
Parent p = new Child();
System.out.println(p.name); // 輸出 "Parent"
p.print(); // 輸出 "Child"
變量顯示父類值,方法卻執行子類邏輯。
p.name 按引用類型 Parent 解析,無動態分發機制。方法代表「行為契約」(介面),變量代表「狀態特徵」。多態核心是「同一介面,多種實現」,針對行為而非狀態。
p.name 究竟佔多少記憶體?父類與子類同名字段內存佈局衝突無法解決。getName()/setName() 訪問,由方法多態實現邏輯復用。private,提供 getter/setter。getter 而非重新聲明字段。FieldHidesSuperclassField 檢查,杜絕隱藏變量。「洗衣粉能不能吃?」——從化學成分看有毒;從產品定位看是洗衣服用的,不是設計給人吃的。同理,變量不是為多態設計的。