【问题标题】:Is Polymorphism same in JAVA & C++? [closed]JAVA和C++中的多态性相同吗? [关闭]
【发布时间】:2018-08-14 11:40:25
【问题描述】:

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

【问题讨论】:

  • OOP 的高级概念与语言无关。它们在每种语言的结构中的实现方式是不同的。每种 OOP 语言在语义和语法上都有差异。计算机语言随着时间的推移而发展,如果不破坏大量现有代码(价值数百万人年),很难添加新设施;所以有时新设施并没有以最优雅的方式添加。
  • 是的,我知道并理解这一点,但是为什么对多态性是否有类型存在普遍分歧(imo)?
  • 多态的基本概念与编程语言无关。支持它的机制(例如,实现多态性的代码构造)在 C++ 和 Java 之间存在一些微妙且不那么微妙的方式不同。每种语言的程序员 - 特别是新手,但也有一些糟糕的两种语言的老师 - 习惯于将他们选择的语言的机制描述/混为一谈为多态性。顺便说一句:C 编程通常不被认为等同于函数式编程,所以你也在混淆概念。
  • 您能否添加对这个“...一般分歧...”的引用。请。
  • 美国不同地区的人们对可口可乐饮料产品的通用名称存在分歧。 “苏打水”、“汽水”、“可乐”(​​通称)……同理,学术界人士在术语甚至“多态性”等术语的基本定义上也存在分歧。对于那些认为这些术语在任何地方都有一个单一的、精确的含义的人来说,这可能会让他们感到惊讶。

标签: java c++ oop polymorphism


【解决方案1】:

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

虽然大多数 OO 语言(java、C# 等)支持本机接口并禁止多重继承,但 C++ 的工作方式正好相反。

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

但是,正因为 C++ 允许您进行多重继承,所以您应该谨慎对待它。继承多个非纯虚拟类(非接口)很容易产生意大利面代码,甚至很多人认为它是反模式。

【讨论】:

  • 说“只有纯虚方法的类”可能比“纯虚类”更准确,因为在 C++ 中没有任何方法可以指定纯虚类——那就是其他语言的界面。
  • @Dave Doknjas - 你是对的。我将您的建议应用于我的回答。
【解决方案2】:

另一个明显的区别(除了 C++ 多重继承)将来自类的专业化。 Java 使用泛型(所有专业化的一个类),而 C++ 使用模板(每个专业化一个不同的类)。由于 C++ 的朋友们经常喜欢这种模板系统,它可以导致 Java 和 C++ 之间的不同设计模式。

【讨论】:

  • 如果您在不知道这一点的情况下重用大型模板类,它可能会使您的应用程序意外地变大。桌面开发并不重要,但嵌入式开发人员应始终牢记这一点。
【解决方案3】:

据我了解,多态性具有以下几个共同特征:

  • 继承

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

  • 函数重载

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

  • 运算符重载

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

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

在 Java 中不支持,但支持使用“+”运算符连接字符串。 另外值得注意的是,运算符重载只是一种特殊的函数重载。

这些都是面向对象的语言,但不一定以相同的方式处理每一种语言,这可能是导致对什么是多态性存在一些分歧的原因。

【讨论】:

  • 运算符重载只是一种特殊的函数重载,因为运算符是函数。至少上课。原始数据类型有所不同,但它们也不是可继承的。
  • &lt;&lt; 运算符不是由C++ 重载,而是由std::ostream 重载。 &lt;&lt; 并不总是导致控制台输出,但标准流使用它来插入元素。 std::cout 恰好是 std::ostream 的一个对象,或者它的一个子对象。
  • 好点。我是堆栈溢出的新手,我应该编辑我的帖子来解决这个问题吗?
  • 是的。提高答案的质量始终应该是正确的方法。
  • 好的,谢谢@Detonar
猜你喜欢
  • 2012-10-05
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多