4 回答

TA貢獻1942條經(jīng)驗 獲得超3個贊
Java中的方法調(diào)用是這樣的,比如說:
B b=new B();
b.test();//實際相當(dāng)于B.test(this)
//然后調(diào)用
super.a();//實際相當(dāng)于調(diào)用了A.a(this)
//所以,當(dāng)進入A類方法的時候this指向的還是B的對象
//你可以在super處打個斷點,看看super到底是什么東西

TA貢獻1884條經(jīng)驗 獲得超4個贊
對于這種問題我傾向于將“類class”和“實例instance”分清楚討論。
this
指向的是instance,你在A#a()
方法里將this
強制轉(zhuǎn)換成B
類型的變量是完全合法的。
當(dāng)然到底這個時候this
是不是B
類型的還得在運行時判斷(這個JVM會判斷的)
所以也別管什么super、子類父類,你只需要看調(diào)用a()
的時候,那個instance到底是什么類型就行了。

TA貢獻1859條經(jīng)驗 獲得超6個贊
你可以在寫個A的子類C,
public class C extends A {
public void test() {
super.a();
}
public static void main(String[] args) {
new C().test();
}
}
試試感覺如何
添加回答
舉報