關於方法的重載 和 構造函數

 using System;
     class A
     {
          public A()
           {
                PrintFields();
           }
          public virtual void PrintFields(){}
      }
      class B:A
      {
           int x=1;
           int y;
           public B()
   {
               y=-1;
           }
           public override void PrintFields()
           {
               Console.WriteLine("x={0},y={1}",x,y);
           }
當使用new B()建立B的實例時,產生什麼輸出?ide

答:X=1,Y=0;x= 1 y = -1繼承

緣由:流程是這樣的:類B繼承了類A,,,並且重寫了A中的方法PrintFields

當程序實例化B時,,由於繼承關係,,B會先調用其父類的構造方法,,而A的構造中又調用 了 PrintFields 在A中 printFields是虛方法,,因此會調用B中的重寫 當調用 PrintFields時 B的構造還未執行,因此y=0而不是-1.因此輸出結果是x=1,y=0 若是 B b=new B();b.PrintFields();那麼輸出結果就是x=1,y=-1。it

相關文章
相關標籤/搜索