继承会增加耦合性吗?javac++oop99我对面向对象编程技术比较新,据我了解,耦合是创建可维护、可重用代码的最大障碍。

当我们让多个子类继承一个基类时,子类是否会依赖于基类?如果我以后必须删除基类,这样是否会导致子类中的代码出错?

- Jobin Jose13标准子类型面向对象编程依赖于里氏替换原则的基本思想。所以,是的,改变父类(使得子类无法遵守之前声明的契约)会破坏子类。然而,这是一种奇怪的(但我不能说它是错误的)对“耦合”的使用方式。也许这只是意味着在实现子类型关系中假定/隐含了耦合。 - user2864740肯定会破坏子类中的代码。避免这种情况的一种方法是使用接口而不是超类。但是为什么要删除如此重要的超类呢? - nom1@JobinJose FWIW,我很少使用继承(但是经常使用接口和DI),除了一些树形库(例如UI控件)之外,发现它是一个过度使用的结构。我甚至会认为在Java中,它经常被用作在没有其他优点的情况下重用代码的绷带。(我不能说C++的用法,但它是一种不同的语言。) - user28647401如果继承的函数不太重要,那么在子类中重新创建这些函数会不会更好呢? - nom1@JobinJose 我不同意“继承在创建良好设计方面似乎很重要”的说法,您是否认为不使用继承会导致设计不良?您对C语言有什么看法?它没有面向对象的特性,但可以说是编程的通用语言... - nom显示剩余8条评论2个回答77是的。这被称为子类耦合:

描述了子类和其父类之间的关系。

像所有耦合一样,影响一个单元可能会影响依赖于它的单元。

在这种情况下,移除父类将会影响所有子类,因为在删除超类型时会出现编译器错误。

这意味着子类与超类型相耦合。

- Dioxin151@Nabeel 实际上,这就是继承被滥用的方式。你应该始终使用“is-a”或“has-a”的概念:Dog 是一个 Animal,所以 Dog extends Animal。使用继承来最小化代码并不是最好的方式。将其视为一种分组特定类型的方法,允许您通过实例方法为每个特定类型提供功能,这些方法可以被覆盖以允许更具体的行为。 - Dioxin@NabeelOmer 移除 Animal 意味着您的应用程序不再需要动物。这意味着它也不再需要 Dog 或 Cat,因为它们也是 Animal。Dog 是一种动物。 - Dioxin您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Dioxin@NabeelOmer C语言在所有方面都缺乏面向对象的特性(虽然有一些技巧可以实现通用的面向对象风格,但并不相同),所以我猜你需要花点时间来学习面向对象编程 :) 它可以做出惊人的事情。 - Dioxin@VinceEmigh 我认为在C语言中没有任何事情是不可能的,甚至在C++中,即使您不使用面向对象编程部分,也可以实现一切。自从我开始学习C\C++(我不知道我使用哪个,我使用带有new的printf()!)已经过去了半年多了!在那之前,我认为面向对象编程很神奇,但是当你接触到过程式编程时,你会发现面向对象编程被高估了... - nom显示剩余10条评论回答链接55父类与其子类之间的关系称为子类依赖或实现依赖。和其他类型的依赖一样,实现依赖会在两个类之间产生一些耦合。请记住,在您的架构中,类之间的耦合必须最小化。

正如《设计模式》一书所述,减少这种耦合的唯一方法是使用以下原则:

按接口编程,而不是按实现编程。

然后,如果必须使用继承,则最好使用抽象类作为父类,并允许子类仅覆盖抽象方法。

在具体类之间使用继承也被称为白盒代码重用。

因为继承暴露了子类对父类实现的细节,所以通常说“继承破坏了封装性”。

那么,相反地,使用黑盒代码重用,即对象组合,它不会破坏封装性并最小化子类耦合。

- riccardo.cardin回答链接网页内容由stack overflow 提供, 点击上面的可以查看英文原文,

双鱼座配天蝎还是巨蟹?哪个星座更合适?
中年人是指多少岁?世卫组织给出了准确答案,结果你能接受吗?