zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ValueError:Expected more than 1 value per channel when training, got input size torch.Size([1, 512, 1, 1])
    指定GPU运行
    ModuleNotFoundError: No module named 'past'
    ImportError: libSM.so.6: cannot open shared object file: No such file or dir
    ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
    zsh: command not found: conda
    TypeError: Class advice impossible in Python3. Use the @implementer class decorator instead.
    数据结构(八)图
    数据结构(二)线性表
    数据结构(七)数与二叉树
  • 原文地址:https://www.cnblogs.com/qq641120784/p/7289295.html
Copyright © 2011-2022 走看看