JAVA和C++中的多态性相同吗?
Is Polymorphism same in JAVA & C++?
多态性在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语言,但不一定以相同的方式处理这些语言,这可能是导致对多态性存在分歧的原因。
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 运行时多态性和dynamic_cast需要澄清
- 如何调用指针类型的方法(禁用多态性)?
- 从基类调用函数的多态性
- 运行时多态性 - 箭头运算符访问了错误的成员?
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?