84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
執行順序是這樣的:
1. super(); 1.1. super.i = 7; 1.2. this.setI(20) => this.i = 60; 1.3. System.out.println("i from a is " + super.i) => 7; 2. this(); 2.1. this.i = 10; 2.2. System.out.println("i from b is " + this.i) => 10;
A.i 和 B.i 都是package-private的, B.i 没有Override A.i, 這兩者是獨立的;
A.i
B.i
A.setI 和 B.setI 都是public, B.setI Override A.setI, A在构造时调用的是B.setI;
A.setI
B.setI
B在構造函數之外的成員初始化是在super()之后执行的, B.i先是在super里被B.setI設為60, 再被B的成員初始化設為10;
super()
刪除B中的int i = 10;之后, 如果A和B处于同一个package, B.setI访问的就是A.i, super()時A.i被設為60之後就不會有變更, 兩次印刷都是60
int i = 10;
在子類別中再宣告一個父類別中已有的成員,不會報錯嗎?至少也應該是警告吧。
我只能說,題目出得太缺德了。實際開發中不可能這麼寫,自己給自己挖個坑啊。
7.101.到A的構造方法,執行完Object的空參構造。 2.int I=73.setI(20)呼叫的是子類別的setI() 此時子類別的I為60,父類別的仍為7.4.列印this.i 此時在父類別中.是7;(注意點:變數看實際呼叫者,this是當前父類別;方法因為被重寫,呼叫子類別)5.int I=10 覆寫了原先的60.6,列印this .i 此時為10.
60.60注意:你刪除了子類的I,預設調用的就是父類的I3.調用子類setI,賦值給了父類,此時父類改變為60.5.此時沒有覆蓋,this.i 預設呼叫父類別繼承下來的I. 為60.
論Degbug的重要性...
執行順序是這樣的:
A.i
和B.i
都是package-private的,B.i
没有OverrideA.i
, 這兩者是獨立的;A.setI
和B.setI
都是public,B.setI
OverrideA.setI
, A在构造时调用的是B.setI
;B在構造函數之外的成員初始化是在
super()
之后执行的,B.i
先是在super里被B.setI
設為60, 再被B的成員初始化設為10;刪除B中的
int i = 10;
之后, 如果A和B处于同一个package,B.setI
访问的就是A.i
, super()時A.i被設為60之後就不會有變更, 兩次印刷都是60在子類別中再宣告一個父類別中已有的成員,不會報錯嗎?至少也應該是警告吧。
我只能說,題目出得太缺德了。實際開發中不可能這麼寫,自己給自己挖個坑啊。
7.10
1.到A的構造方法,執行完Object的空參構造。
2.int I=7
3.setI(20)呼叫的是子類別的setI() 此時子類別的I為60,父類別的仍為7.
4.列印this.i 此時在父類別中.是7;(注意點:變數看實際呼叫者,this是當前父類別;方法因為被重寫,呼叫子類別)
5.int I=10 覆寫了原先的60.
6,列印this .i 此時為10.
60.60
注意:你刪除了子類的I,預設調用的就是父類的I
3.調用子類setI,賦值給了父類,此時父類改變為60.
5.此時沒有覆蓋,this.i 預設呼叫父類別繼承下來的I. 為60.
論Degbug的重要性...