JAVA和C++中的多态性相同吗?

Is Polymorphism same in JAVA & C++?

本文关键字:多态性 C++ JAVA      更新时间:2023-10-16

多态性在C++和在Java中一样吗?另外,当我们说多态性有静态和动态类型时,C++中是否存在同样的东西?

Java中的OOP和C++之间的一个方面是接口实现和多重继承。

虽然大多数 OO-语言(java、C# 等(都支持本机接口并禁止多重继承C++但反过来工作

。C++没有接口,只有类。如果你想模仿一个接口,你必须编写一个只用纯虚拟方法的类并继承它。这没有问题,因为C++允许您继承其他 OO-语言所没有的多个。(一个类,java 中的无限接口(。

但是,仅仅因为C++允许您多重继承,您应该对此保持谨慎。继承多个非纯虚拟类(非接口(可以很容易地产生spagetti代码,很多人甚至认为它是反模式的。

另一个很大的区别(除了C++多重继承(将伴随着类的专业化。Java 使用泛型(一个类用于所有专用化(,而C++使用模板(每个专用化一个不同的类(。由于C++研究员通常喜欢这种模板系统,因此它可能导致Java和C++之间的设计模式不同。

根据我的理解,多态性具有一些共同特征,即:

  • 遗产

C++支持多重继承,而 Java 不支持,而 C# 不支持。

  • 函数重载

Java、C++ 和 C# 支持函数重载。

  • 运算符重载

在C++中,您可以重载不同的运算符,以便它们对用户定义的类型执行不同的操作。 以 C++ 中的<<运算符为例:

cout << "First sentence." << endl;

<<运算符用于在 C 中执行按位移位,但 std::ostream 重载这些运算符。

在 Java 中不受支持,但支持用于连接字符串的"+"运算符。 还值得注意的是,运算符重载只是一种专门的函数重载。

事实上,这些都是OO语言,但不一定以相同的方式处理这些语言,这可能是导致对多态性存在分歧的原因。