class - 两个类之间的 OOP 关系

标签 class oop inheritance composition relationships

当涉及到 InheritanceComposition 问题时,我一直在努力解决两个类之间的抽象......IS-A 与 HAS-A LoginManagerAuthenticateManager 等类之间的关系。

我看待它的方式 LoginManager 可以是并且可以舒适地坐在 AuthenticateManager 的 IS-A 地方,将其作为父类(super class)继承(即 Class LoginManager extends AuthenticateManager)或者只是将 AuthenticateManager 的对象声明为它自己类(class)的成员,这意味着组合,所以我想这只是归结为经验和对 OOP 范式的正确知识。那么请问,谁能帮助解释一下这些类之间的正确关系是什么?

PS:本主题不符合本站提问原则,请版主不要关闭。

谢谢。

最佳答案

这取决于您的需求。继承使您可以访问父类(super class)的 protected 成员,而组合则不能。如果有些类成员应该只对派生类可用,那么让它们成为属性并通过组合访问它们是没有意义的,因为每个其他对象也可以访问它们。否则就是你和你的团队喜欢什么。

编辑:

没有任何规则像您认为的那样严格。例如,设计模式只是模板,您不需要严格遵循它们。你不能盲目遵守规则,没有人会因此相信你。将 OOP 牢记在心但编写代码要好得多,这样您就可以清楚地解释您做了什么以及为什么。

由于我不知道你的两个类的设计,所以我不能真正告诉你你的需求是什么。此声明(已提及)应该足以为您指明正确的方向。

Inheritance provides you with access to protected members of a superclass whereas composition does not.

关于class - 两个类之间的 OOP 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770188/

相关文章:

c++ - 在C++中,这个方法调用的是静态绑定(bind)还是动态绑定(bind)?

java - 从父类类型方法返回子对象

c++ - 具有某些不会在逻辑上定义的属性的类的概念

java - 2个类之间有什么关系?

Javascript:如果不用定义原型(prototype)方法也能实现继承,为什么还要使用定义原型(prototype)方法来继承?

c++ - 虚函数设计问题

arrays - 无法使用 Swift 在 Xcode 中的类中创建数组

java - 当我尝试重写父类的方法时出现错误。这是为什么?

java - 如何搭建仿真架构,OO设计

c++ - 如何使父类的方法使用不同的变量?