繼承關係中編譯對於同名方法的處理
一個衍生類別繼承父類別(又叫基底類別)時,如果衍生類別的方法跟父類別同名時,會如何?請看範例中所舉的三種情形。
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」即可解決,