OOP中的多重继承

问题描述 投票:1回答:6

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

oop multiple-inheritance
6个回答
3
投票

OO中没有要求支持多重继承,这是由C ++等语言支持的。 C#和Java不支持,因此它们也不低于OO。


3
投票

请看看Diamond Problem


3
投票

继承与面向对象无关。有很多OO语言根本不支持继承,并且有很多支持继承的非OO语言。这两件事是完全正交的。


3
投票

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


0
投票

多重继承是指某些面向对象编程语言的一个特性,而不是所有这些特性。

您指的其他语言使用interfaces


0
投票

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

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

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

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

据我所知,不需要OOP语言来支持,但至少有多个超类型是可用的OOP语言,大多数设计模式都可以直接实现。多重继承,恕我直言,对于证明复杂性和成本是非常有用的。十年前我已经转向Java了,不能说我错过了太多。

© www.soinside.com 2019 - 2024. All rights reserved.