JAVA: 先执行父类的构造函数,然后是引用对象的构造函数(必须有new声明实际类型),然后是自己的构造函数。 public class Test { public static void main(String[] args) { Child child = new Child(); } }
class Parent { Parent() { System.out.println("to construct Parent."); } }
class Child extends Parent { Child() { System.out.println("to construct Child."); } Delegatee delegatee = new Delegatee(); }
class Delegatee { Delegatee() { System.out.println("to construct Delegatee."); } }
结果是
而C#的构造函数执行顺序是:先引用对象,在父类,再子类.to construct Parent. to construct Delegatee. to construct Child.
using System;
namespace ConsoleApplication1 { public class Test { public static void Main(String[] args) { Child child = new Child(); } } class Parent { public Parent() { Console.WriteLine("to construct parent"); } }
class Child : Parent { public Child() { Console.WriteLine("to construct Child."); } Delegatee delegatee = new Delegatee(); } class Delegatee { public Delegatee() { Console.WriteLine("to construct Delegatee."); } } }
结果是 to construct Delegatee. to construct Child. to construct Parent.
总结: 被依赖的先构造,依赖于人的后构造。JAVA 是跨层依赖优先于同层依 赖构造,而C#是同层依赖优先于跨层依赖.

|