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

 

posted @ 2017-08-05 09:52  ♂Baum  阅读(2289)  评论(0编辑  收藏  举报