Java和CSharp的类继承的执行过程的差异

Posted Baum

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Java和CSharp的类继承的执行过程的差异的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 面向对象-2-继承(Inheritance)

csharp 可能会引起问题的类的继承问题,父类后来增加的方法可能会引起子类的函数重载错误

类的执行过程

Java面试问题

java面试题

Java面试必备