Re: [問題] 使用super呼叫父類別屬性

看板java作者 ("叫人看書"哥‧退避)時間14年前 (2011/10/03 00:16), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《aoksc (重出江湖)》之銘言: : 請問各位 : 一般使用super會呼叫到上層類別的成員 : 如果現在C繼承B B繼承A : 三個類別都有變數x : 那如果在C類別物件想操控A類別隱藏的x屬性 : 請問有什麼方法呢? : 我剛試了super好像只能呼叫到上一層的x : 目前我只想到應該可以在B類別建立一個方法 : 再由這個方法使用super再往上一層 : 不知道還有其他方法嗎? 如果你講的"A類別隱藏的x屬性"意思不是 A::x 是 private field,那麼 你可以直接把 C reference cast 成 A reference 來 access class A 所 定義的 field。 field access 是完全由 reference type 來決定目標。 class A { public int x = 0; } class B extends A { public int x = 1; } class C extends B { public int x = 2; } public class DemoABC { public static void main(String[] args) { C c = new C(); B b = c; A a = c; System.out.println(a.x); // 0 System.out.println(b.x); // 1 System.out.println(c.x); // 2 } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.26.230 ※ 編輯: sbrhsieh 來自: 114.45.26.230 (10/03 00:18)

10/03 19:55, , 1F
我猜原po是想要看到c.x出現0?
10/03 19:55, 1F

10/05 10:58, , 2F
利用upcasting or downcasting 來達到目的?
10/05 10:58, 2F
文章代碼(AID): #1EY8vBGs (java)
文章代碼(AID): #1EY8vBGs (java)