为什么我必须在抽象类中将字段声明为"public"才能从派生类访问它?



我有CPU和人类播放器,所以我决定使用抽象类来定义共同特征。虽然它们的方法会有所不同,但两者的字段部分ToPlace将是相同的。我不明白为什么它必须是公开的,我认为这就像常规继承一样。我不希望这个列表是公开的,否则它不起作用。

abstract class Player
    {
        abstract public void Move(Piece p);
        abstract public void Place(Piece p);
        abstract public void TakeP(Piece p);
        List<Piece> piecesToPlace = new List<Piece>();
    }
它不必

是公共的,但它必须是内部的,假设继承的类位于同一命名空间中、受保护或内部保护。抽象类可以定义行为以及接口。因此,它可能仍然希望隐藏实现细节。

类成员的默认值是 private ,所以除非你为 piecesToPlace 指定任何其他访问修饰符,否则它只能在Player类中访问。

你不必让它public,使用protected将使继承类可以访问它。

听起来

你在protected关键字之后,这将:

访问仅限于从 包含类。

查看此处以获取更多信息:http://msdn.microsoft.com/en-us/library/ba0a1yw2(v=vs.110).aspx

逻辑很简单,这取决于你需要它。如果你定义它 公共 ,例如:

    class Base
    {
        abstract public void Print();
    }
    class Derived: Base
    {
         public override void Print()
         {}
    }
    Main()
    {
         Base base = new Derived();
         //its possible
         base.Print();
    }

如果将其定义为受保护,则为"基础"。无法访问打印(智能感知甚至不会显示这种方法的存在)。由于这些方法只能从派生类访问。

最新更新