普通類、抽象類、接口之間的繼承實現關係

普通類、抽象類、接口之間的繼承實現關係圖(參考:類與抽象類接口的關係):ide

下面從執行的結果中,清晰呈現了代碼的執行順序。序號 5~9 說的問題,哪位能明白是咋會兒事的,請在評論區指導一下,謝謝! 函數

 1 package test;
 2 
 3 public class ExtentsAndImplements {
 4 
 5     /**
 6      * 這塊代碼打開註釋,FatherRootClass()、FatherRootAbstract()、ChildrenClass()
 7      * 上面這一串構造函數會在 System.out.println(" call Main() ................") 與 主類構造函數 ExtentsAndImplements() 之間執行【比較很差理解】。
 8      **/
 9 //     ChildrenClass childrenClass = new ChildrenClass();
10 
11     ExtentsAndImplements (){
12         System.out.println(" 主類無參構造函數執行:ExtentsAndImplements construct 11111111111111111111");
13     }
14 
15     public static void main(String[] args) {
16         System.out.println(" call Main() ................");
17         ChildrenClass childrenClass = new ExtentsAndImplements().new ChildrenClass(" new ChildrenClass(param) : ");
18         System.out.println(" ChildrenClass test() ................");
19         childrenClass.test();
20     }
21 
22     class FatherRootClass {
23         private FatherRootClass(){
24             System.out.println(" FatherRootClass No construct !!!=================");
25         }
26         private FatherRootClass(String FatherRootClass){
27             System.out.println(FatherRootClass + " FatherRootClass construct !!!=================");
28         }
29     }
30 
31     interface SimpleRootInterface {
32         void run();
33     }
34 
35     abstract class FatherRootAbstract extends FatherRootClass implements SimpleRootInterface{
36         public FatherRootAbstract(){
37             System.out.println(" FatherRootAbstract extends FatherRootClass No construct !!!  #######################");
38         }
39         public FatherRootAbstract(String FatherRootAbstract){
40             super(FatherRootAbstract);
41             System.out.println(FatherRootAbstract + " FatherRootAbstract extends FatherRootClass construct !!!  #######################");
42         }
43 
44         abstract void excute();
45 
46         @Override
47         public void run() {
48             this.excute();
49             System.out.println(" FatherRootAbstract implements SimpleRootInterface.run(). " +
50                     "this is FatherRootAbstract'run(). ------333333333333333333333");
51         }
52 
53     }
54 
55     class ChildrenClass extends FatherRootAbstract{
56         public ChildrenClass(){
57             System.out.println(" ChildrenClass extends FatherRootAbstract No construct !!!  @@@@@@@@@@@@@@@@@@@@");
58         }
59         public ChildrenClass(String begin){
60             super(begin);
61             System.out.println(begin + " ChildrenClass extends FatherRootAbstract construct !!!  @@@@@@@@@@@@@@@@@@@@");
62         }
63 
64         private void test(){
65 //            super.run();
66             this.run();
67             this.excute();
68             System.out.println(" SUCCESS!");
69         }
70 
71         @Override
72         public void excute() {
73             System.out.println(" ChildrenClass extends FatherRootAbstract implements SimpleRootInterface. " +
74                     "this is ChildrenClass'excute(). ------666666666666666666666");
75         }
76     }
77 
78 }

 

運行結果:this

 1  call Main() ................
 2  主類無參構造函數執行:ExtentsAndImplements construct 11111111111111111111
 3  new ChildrenClass(param) :  FatherRootClass construct !!!=================
 4  new ChildrenClass(param) :  FatherRootAbstract extends FatherRootClass construct !!!  #######################
 5  new ChildrenClass(param) :  ChildrenClass extends FatherRootAbstract construct !!!  @@@@@@@@@@@@@@@@@@@@
 6  ChildrenClass test() ................
 7  ChildrenClass extends FatherRootAbstract implements SimpleRootInterface. this is ChildrenClass'excute(). ------666666666666666666666
 8  FatherRootAbstract implements SimpleRootInterface.run(). this is FatherRootAbstract'run(). ------333333333333333333333
 9  ChildrenClass extends FatherRootAbstract implements SimpleRootInterface. this is ChildrenClass'excute(). ------666666666666666666666
10  SUCCESS!

 

其他代碼不變,把序號9 (ChildrenClass childrenClass = new ChildrenClass();)的註釋打開,再執行程序,運行結果爲(結果中的二、三、4 在一、5之間執行,我有點懵,有能看明白的高手,請在評論區點化點化(* ̄︶ ̄) ):spa

 1  call Main() ................
 2  FatherRootClass No construct !!!=================
 3  FatherRootAbstract extends FatherRootClass No construct !!!  #######################
 4  ChildrenClass extends FatherRootAbstract No construct !!!  @@@@@@@@@@@@@@@@@@@@
 5  主類無參構造函數執行:ExtentsAndImplements construct 11111111111111111111
 6  new ChildrenClass(param) :  FatherRootClass construct !!!=================
 7  new ChildrenClass(param) :  FatherRootAbstract extends FatherRootClass construct !!!  #######################
 8  new ChildrenClass(param) :  ChildrenClass extends FatherRootAbstract construct !!!  @@@@@@@@@@@@@@@@@@@@
 9  ChildrenClass test() ................
10  ChildrenClass extends FatherRootAbstract implements SimpleRootInterface. this is ChildrenClass'excute(). ------666666666666666666666
11  FatherRootAbstract implements SimpleRootInterface.run(). this is FatherRootAbstract'run(). ------333333333333333333333
12  ChildrenClass extends FatherRootAbstract implements SimpleRootInterface. this is ChildrenClass'excute(). ------666666666666666666666
13  SUCCESS!
相關文章
相關標籤/搜索