從抽象類繼承時,為什么抽象基類中的受保護抽象方法在抽象派生類中被覆寫時不能是私有的?
換個說法,抽象方法是否可以由子抽象類定義,但孫子類無法訪問?
考慮一個簡化的例子:
public abstract class A
{
// This method is protected - makes sense
protected abstract void M();
}
public abstract class B : A
{
// Why can't this be private?
// Compiler forces it to be protected
// but this means grandchildren classes always have access to this method
protected override void M()
{
// Do something
}
}
public class C : B
{
// Is it possible for M() to be inaccessible here?
}
uj5u.com熱心網友回復:
孫類 C 也實作了父類 A,所以這是不可能的。畢竟,在程式中,您可以將任何 C 物件強制轉換為型別 A 的變數,并且您希望能夠在其上呼叫 M() 方法。無論繼承層次結構級別如何,子類不實作其父類的所有成員都是沒有意義的。
uj5u.com熱心網友回復:
由于繼承的作業原理,我不相信這是可能的。所有子類(派生類)都擁有父類所擁有的一切,以及您需要的任何額外的東西。
也就是說 - 如果您希望子類沒有其父類擁有的方法之一,您可以使用介面來實作。只需定義一個缺少您要限制的一種方法的介面,并讓父級和子級都實作它。
但回到上面@Jon Skeet 所說的話。為什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444880.html
