我有CPU和人类播放器所以我决定使用抽象类来定义常用功能。虽然他们的方法会有所不同,但两者的字段PieceToPlace都是相同的。 我不明白为什么它必须公开,我认为这就像常规继承。我不希望这个列表公开,但它不起作用。
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>();
}
答案 0 :(得分:2)
它不必是公共的,但它必须是内部的,假设继承的类在同一名称空间,受保护或受内部保护。抽象类可以定义行为以及接口。因此,它仍然可能希望隐藏实现细节。
答案 1 :(得分:1)
班级成员的默认值为private
,因此除非您为piecesToPlace
指定任何其他访问修饰符,否则只能在Player
班级内访问。
您无需使用public
,使用protected
可以继承类。
答案 2 :(得分:0)
这听起来像是在protected
关键字之后,这将是:
访问仅限于从中派生的包含类或类型 包含类。
请点击此处了解详情:http://msdn.microsoft.com/en-us/library/ba0a1yw2(v=vs.110).aspx
答案 3 :(得分:0)
逻辑很简单,这取决于你的需要。如果您将其定义为public,例如:
class Base
{
abstract public void Print();
}
class Derived: Base
{
public override void Print()
{}
}
Main()
{
Base base = new Derived();
//its possible
base.Print();
}
如果您将其定义为受保护,则无法访问base.Print(intellisense甚至不会显示此类方法存在)。由于这些方法只能从派生类中访问。