Java和CSharp的類繼承的執行過程的差異


 Java和CSharp的類繼承的執行過程的差異:

Java的執行過程:子類先初始化父類的成員→初始化父類的構造函數→初始化子類的成員→初始化子類構造函數。

CSharp的執行過程:子類先初始化子類的成員→初始化父類的成員→初始化父類的構造函數→初始化子類的構造函數。

假設:A類繼承自B類。

Java的執行過程:A類先初始化B類的成員→初始化B類的構造函數→ 初始化A類的成員→初始化A類的構造函數。

CSharp的執行過程:A類先初始化A類的成員→初始化B類的成員→初始化B類的構造函數→初始化A類的構造函數。

依次假設:A類繼承自B類,B類繼承自C類,依次類推下去。

Java的執行過程:A類先初始化C類的成員→初始化C類的構造函數→初始化B類的成員→初始化B類的構造函數→初始化A類的成員→初始化A類的構造函數。

CSharp的執行過程:A類先初始化A類的成員→初始化B類的成員→初始化C類的成員→初始化C類的構造函數→初始化B類的構造函數→初始化A類的構造函數。

 

示例代碼:

//----------------------Java代碼----------------------

 1 //----------------------Java代碼----------------------
 2 class Demo extends X{
 3     Y y = new Y();
 4     Demo(){System.out.print("Z");}
 5     public static void main(String[] args) {
 6         new Demo();
 7     }
 8 }
 9 class X extends J {
10     Y y = new Y();
11     X() {
12         System.out.print("X");
13     }
14 }
15 class Y {
16     Y() {
17         System.out.print("Y");
18     }
19 }
20 class J{
21     K k = new K();
22     J(){
23         System.out.print("J");
24     }
25 }
26 class K{
27     K(){
28         System.out.print("K");
29     }
30 }
31 //Java輸出結果為:KJYXYZ

 

//----------------------CSharp代碼----------------------

 1 //----------------------CSharp代碼----------------------
 2 using System;
 3 
 4 class Demo : X
 5 {
 6     Y y = new Y();
 7 
 8     public Demo()
 9     {
10         Console.Write("Z");
11     }
12 
13     static void Main(string[] args) {
14         new Demo();
15     }
16 }
17 
18 public class X : J
19 {
20     Y y = new Y();
21     public X()
22     {
23         Console.Write("X");
24     }
25 }
26 
27 public class Y
28 {
29     public Y()
30     {
31         Console.Write("Y");
32     }
33 }
34 
35 public class J
36 {
37     K k = new K();
38     public J()
39     {
40         Console.Write("J");
41     }
42 }
43 
44 public class K
45 {
46     public K()
47     {
48         Console.Write("K");
49     }
50 }
51 //CSharp輸出結果為:YYKJXZ

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM