我正在尝试在实际示例中学习接口和基类。 让我们说我想要抽象玩家实体 在Player.cs上应该是分配玩家的每项运动的所有常见属性和方法。因此,将有TeamSportPlayer,IndividualSportPlayer。 同样,FootballPlayer将派生自TeamSportPlayer,TennisPlayer将派生自IndividualSportPlayer等。所有这些球员都应该能够获得一流的球员及其属性。
希望我不要太困惑。
问题是:这是以oop方式抽象玩家代表的正确方法吗?
你会如何在这个实际例子中做到这一点?
答案 0 :(得分:2)
抽象类用于定义您永远不会拥有实例的对象。另一方面,接口用于定义对象的行为,接口独立于继承层次结构。
使用您的运动示例:
Player.cs
可以是一个抽象类。它有每个球员都有的名字,年龄,地址等字段。但你从来没有在运动场上有“球员”,你有一个“足球运动员”或“篮球运动员”。类FootballPlayer.cs
和BasketballPlayer.cs
继承自抽象类Player.cs。
另一方面,接口定义了类共享的一些常见行为。通常用于定义其他类如何与它们交互。例如,如果您有名为TennisPlayer.cs
,BasketballPlayer.cs
和FootballPlayer.cs
的类,则可以使用名为IHasJerseyNumber.cs
的接口。篮球和足球运动员都有球衣号码,所以他们会继承IHasJerseyNumber.cs
界面。网球运动员没有号码,他们不会继承界面。像Referee.cs
这样一个完全独立的类也可以实现界面,只要他也有一个球衣号码(在某些运动中可能)。
您可以在这里阅读更多内容: