【问题标题】:Multiple inheritance in OOPOOP 中的多重继承
【发布时间】:2010-04-27 18:22:23
【问题描述】:

我对 OOP 特性、多重继承感到困惑。 OOP 是否允许多重继承?多重继承是 OOP 的一个特性吗?如果多重继承是一项功能,那么为什么 C#、VB.NET、java 等语言不支持多重继承?但是这些语言被认为是强烈支持的 OOP 语言。谁能解答一下这个问题?

【问题讨论】:

  • 那些看起来像一堆陈述,有什么问题?
  • stackoverflow.com/questions/995255/… 的可能重复项(哎呀,我又做了一次,我让你相信,这个问题还没有发布......)

标签: oop multiple-inheritance


【解决方案1】:

OO 中没有要求支持多继承,C++ 等语言都支持。 C# 和 Java 不支持,因此它们同样是 OO。

【讨论】:

  • 最近我遇到了一个问题“多重继承是OOPS的一个特性”?。
【解决方案2】:

继承与面向对象没有任何关系。有很多 OO 语言根本不支持继承,还有很多非 OO 语言确实支持继承。这两件事是完全正交的。

【讨论】:

  • 为什么人们不赞成这个?它恰好是正确的(至少相对于没有继承的 OO 语言)。 JavaScript 是面向对象的,没有继承。和自我。和艾欧。还有 CECIL,如果没记错的话。虽然我想不出有继承的非 OO 语言(Modula-2,也许是通过仔细使用它的 IMPORT 和 EXPORT 语句?),但这并不意味着它们不存在。
  • @只是我的正确意见:Haskell 类型的类具有继承性。它们还具有运行时多态性,这是另一个通常被错误地归因于 OO 语言的特征。
  • 啊,对了!我忘记了 Haskell 的方法。所以投反对票的人是双重无知的。
【解决方案3】:

Java 和 C# 等语言在面向对象原则方面受到 java 的高度启发,是为应用程序开发而构建的,因此这些语言的设计者决定采用可理解并快速实现 OOP 的方法开发者学习了。所以,为了简单和明确每个类在继承中的职责,他们避免考虑一个对象从多个对象继承。而是考虑使用接口来实现多个非常不同的行为和属性。有了这个注意以下原则: 每个对象的单一职责,以及每个接口和后续继承对象的透明职责分离是完全可以理解的。

【讨论】:

    【解决方案4】:

    【讨论】:

      【解决方案5】:

      多重继承是指一些面向对象编程语言的特性,而不是全部。

      您所指的这些其他语言使用interfaces

      【讨论】:

        【解决方案6】:

        首先,你必须区分多重继承和多重超类型,这是两个非常不同的东西。

        多重继承通常反映对实现的实际继承(如大多数 OOP 语言中的类继承)并提出各种问题。一个是名称和实现之间的冲突(例如,两个同名的方法和不同的实现),然后是 idamond 问题。

        多个超类型通常是指检查类型(在某些情况下是强制转换)的能力,通常不涉及继承实现。例如,在 Java 中,您的接口仅声明您的方法。所以你的子类型支持超类型支持的方法的联合。这会带来较少的问题,因为您没有具有多个实现的方法。

        多重继承通常涉及多个超类型,尽管某些语言(如 C++)允许您修改这一事实的可见性(例如,谁能知道类型 B 是类型 A 的子类型)。

        据我所知,OOP 语言也不需要支持任何一种语言,但对于大多数设计模式都可以直接实现的可用 OOP 语言来说,至少需要多个超类型。恕我直言,多重继承对于证明复杂性和成本的合理性并没有那么有用。十年前我已经切换到 Java,不能说我太想念它了。

        【讨论】:

          【解决方案7】:

          Java

          Java 中的多重继承是完全可能的。但是Java有一些限制。

          Java 类不支持多重继承,但 java 接口支持多重继承

          Java 类

          public class elderchild
          {
                \\elder child attributes
          }
          public class middlechild
          {
                \\middle child attributes
          }
          public class parent extends middlechild, elderchild \\this is wrong, multiple class inheritance is restricted 
          {
                \\parent attributes
          }
          

          Java 接口

          public interface animal
          {
                \\animal attirbutes
          }
          public interface mammal
          {
                \\mammal attributes
          }
          public class dog implements animal, mammal  \\this is correct!
          {
                \\dog attributes
          }
          

          注意:菱形问题也可能出现在java中。要了解更多信息,请打开: https://stackoverflow.com/questions/29758213/multiple-inheritance-ambiguity-with-interface#:~:text=Java%20doesn't%20support%20multiple,methods%20will%20have%20same%20signature.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-23
            • 2021-03-29
            • 2013-02-11
            • 2016-06-25
            • 2018-05-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多