作者sbrhsieh ("叫人看书"哥‧退避)
看板java
标题Re: [问题] 使用super呼叫父类别属性
时间Mon Oct 3 00:16:07 2011
※ 引述《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)
1F:推 true0422:我猜原po是想要看到c.x出现0? 10/03 19:55
2F:推 akaing:利用upcasting or downcasting 来达到目的? 10/05 10:58