A a = new B();
B b = new B();
a.show(); // 輸出 "B show"
b.show(); // 輸出 "B show"
System.out.println(a.a); // 輸出 5 (父類值)
System.out.println(b.a); // 輸出 6 (子類值)
B)調用 B.show()。A 或 B)解析字段偏移量。a 編譯類型為 A,故訪問 A.a;b 編譯類型為 B,故訪問 B.a。在子類中提供 getA() 方法覆蓋父類,通過方法調用實現多態:
class B extends A {
public int a = 6;
@Override public int getA() { return a; }
}
// 使用
System.out.println(a.getA()); // 輸出 6
字段應聲明為 private,對外暴露 getter/setter,避免直接訪問導致的多態失效與封裝破壞。