繼承關係中編譯對於同名方法的處理

 

一個衍生類別繼承父類別(又叫基底類別)時,如果衍生類別的方法跟父類別同名時,會如何?請看範例中所舉的三種情形。

using System;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            Paper Paper = new Paper();
            Console.WriteLine("Paper.source = " + Paper.source);
            Paper.Show();
            Console.WriteLine();

            Book Book = new Book();
            Console.WriteLine("Book.source = " + Book.source);
            Book.Show();
            Console.WriteLine();

            Paper becomePaper = new Book();
            Console.WriteLine("becomePaper.source = " + becomePaper.source);
            becomePaper.Show();

            Console.ReadKey();
        }
    }

    class Paper
    {
        public string source = "wood";
        public void Show()
        {
            Console.WriteLine("this is paper");
        }
    }

    class Book : Paper
    {
        public void Show()
        {
            Console.WriteLine("this is Book");
        }
    }
}

執行結果為

說明:

1、會發現編譯器對於同名方法會有預設的處理方式,何種型別就使用該型別自己的同名方法。

2、對於創造一個衍生類別後,再轉成父類別,

Paper becomePaper = new Book();

其呼叫的同名方法也是父類別自己的同名方法。

3、但需須注意編譯器對衍生類別會有警告出現

這時請加入關鍵字「new」即可解決,