上級 › sealedメンバーをオーバーライドしようとした原因と直し方 › パターン1
sealedメンバーをオーバーライドしようとした原因と直し方
sealed overrideを付けたメンバーを、さらに下の派生クラスでオーバーライドしようとすると出るコンパイルエラーです。
1 class Animal { 2 public virtual void Speak() { System.Console.WriteLine("..."); } 3 public virtual void Move() { System.Console.WriteLine("..."); } 4 } 5 class Dog : Animal { 6 public sealed override void Speak() { System.Console.WriteLine("Woof"); } 7 public override void Move() { System.Console.WriteLine("Run"); } 8 } 9 class Puppy : Dog { 10 public override void _____() { System.Console.WriteLine("Yip"); } ^ 11 } 12 class Program { 13 static void Main(string[] args) { 14 Puppy p = new Puppy(); 15 p.Speak(); 16 p.Move(); 17 } 18 }
Program.cs(10,26): error CS0239: 'Puppy.Speak()': cannot override inherited member 'Dog.Speak()' because it is sealed
空欄を埋めてビルドを通す
sealed overrideを付けたメンバーは、それ以上のクラスで再オーバーライドできません。継承階層をそこで止める宣言です。
次の問題