• 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
  • 相关阅读:
    对于excel的操作
    初试 ElasticSearch
    02-基本数据类型
    javascript 三种数组扁平化方式
    javascript数组操作方法
    javascript数组的16种循环(包含ES5、ES6)
    01-typescript-安装及编译
    nvm管理多版本node
    css块级居中的四种方法
    javascript try-catch-finally异常捕获
  • 原文地址:https://www.cnblogs.com/qq641120784/p/7289295.html
Copyright © 2020-2023  润新知