首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

C# 多態性詳解:介面多態與繼承多態(虛擬方法、抽象方法)的程式碼實作

     編輯:Java 相關知識

多態核心概念

同一操作作用於不同物件,產生不同結果。C# 多態包含:介面多態、繼承多態(虛擬方法、抽象方法)。

1. 介面多態

定義介面 IAnimal,具體類別實作介面並提供各自邏輯。

public interface IAnimal { void Eat(); }

public class Wolf : IAnimal {
    public void Eat() => Console.WriteLine("狼吃肉!");
}
public class Sheep : IAnimal {
    public void Eat() => Console.WriteLine("羊吃草!");
}

// 使用
new Wolf().Eat();
new Sheep().Eat();

2. 繼承多態

2.1 虛擬方法

基類用 virtual 標記,衍生類用 override 重寫。可用 sealed 防止進一步重寫。基類必須提供預設實作。

public class Animal {
    public virtual void Eat() { Console.WriteLine("動物進食"); }
}
public class Wolf : Animal {
    public override void Eat() {
        base.Eat(); // 可選:呼叫基類實作
        Console.WriteLine("狼吃肉!");
    }
}
public class Goat : Sheep {
    public sealed override void Eat() => Console.WriteLine("山羊吃草!"); // 封鎖重寫
}

2.2 抽象方法

基類為 abstract,方法僅宣告無實作。衍生類必須 override 實作,且無 base 可呼叫。抽象類不可實例化。

public abstract class Animal {
    public abstract void Eat();
}
public class Wolf : Animal {
    public override void Eat() => Console.WriteLine("狼吃肉!");
}

總結比較

特性虛擬方法抽象方法
基類實作必須提供僅宣告,不實作
衍生類重寫可選強制
可呼叫 base是否
基類可實例化是否(抽象類)
介面多態需 override否,直接實作介面方法

實戰建議

  • 預設行為有共通邏輯 → 用 virtual。
  • 強制每個衍生類自訂邏輯 → 用 abstract。
  • 需多型但不想建立基類實例 → 用介面或抽象類。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved