有關繼承的典型例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一種情況
            A a = new B();//x=1,y=0
            a.PrintFields();//x=1,y=-1
            //因爲構造B之前,先執行變量,y沒有明確賦值,默認爲0。執行B的構造函數,
            //因爲B繼承A,所以先執行A的構造函數。A構造函數調用的PrintFields方法在A類裏是虛函數,它的實現是在B類,
            //所以執行B類的PrintFields方法,結果輸出。雖然繼續執行完B的構造函數,使y的值是-1.但結果之前已經輸出
            //第二種情況
            B b = new B();//x=1,y=0
            b.PrintFields();//x=1,y=-1
            //因爲構造B之前,先執行變量,y沒有明確賦值,默認爲0。執行B的構造函數,因爲B繼承A,所以先執行A的構造函數。
            //A構造函數調用的PrintFields方法在A類裏是虛函數,它的實現是在B類,所以執行B類的PrintFields方法,結果輸出。
            //雖然繼續執行完B的構造函數,使y的值是-1.但結果之前已經輸出

            //第三種情況
            A c = new A();
            c.PrintFields();//什麼都不輸出
            Console.ReadKey();
        }
    }
    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);
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章