我一直在研究高级OOP的主题,我发现自己一遍又一遍地问一个问题......为什么在子类中定义所有方法时使用抽象类。不能在不引起问题的情况下独立于抽象类使用子类吗?
答案 0 :(得分:0)
为什么要使用抽象类
有些人可能认为这是一个很好的解决方案,但抽象类有助于遵循DRY principle,而界面对此没有帮助。然而这需要付出代价(例如,基类实现中的更改可能会破坏扩展它的类),并且如果可能的话,您通常应该更喜欢使用接口。
在不引起问题的情况下,子类是否可以独立于抽象类使用?
扩展特定的前任使您能够使不同的类扩展它是可以互换的。
假设你需要一只任何类型的鸟。鸭子和母鸡都伸出一只鸟意味着你会接受母鸡和鸭子。你可能会说你只需要飞鸟,这意味着你不会再接受母鸡(jcan跳而不是飞),但会继续接受老鹰。但如果你说你需要一只鸭子 - 这意味着你需要一只鸭子,不会接受任何其他类型的鸟类。类扩展另一个类(抽象或非抽象)或接口的事实将允许您将它作为参数传递给期望基类实例的函数。
答案 1 :(得分:0)
当您需要在基类中实现某些东西时,可以使用抽象类,子类应该在同一个方法中实现另一个逻辑。例如,我们需要实现解析不同类型文件的服务:
这是一个很好的解决方案。但这并不意味着你应该这样使用。您可以实现其中一个模式或根本不使用OOP。这只是一种如何实现逻辑的方法。