是否有可能用Java接口替换C ++多重继承?

时间:2014-07-22 03:17:02

标签: java c++ interface multiple-inheritance

我或多或少地同时研究了一些Java和C ++,我注意到Java比C ++方式更友好,更直观地解释OOP。

是的,Java完全是OO,另一方面,C ++支持许多范例,但这并不意味着C ++无法改进其实现OO范式的方式。

C ++支持多重继承,Java使用多个实现(接口)对其进行翻译,我觉得这很简单(我不认为这只是一种意见)。

我的第一个问题是标题。我认为C ++会更友好,而不会失去它的实力。这是一个改进非凡编程语言的问题,但这并不完美。

我的第二个问题是:与Java编程语言的接口(如果有的话)相比,多重继承的优点是什么?

3 个答案:

答案 0 :(得分:4)

多重继承可能是危险的,但它有时是解决问题的最合适的解决方案,并且已经编写了大量使用它的软件。从C ++中删除多重继承会以一种不易修复的方式破坏所有软件。与现有代码兼容比“友好”和#34;更重要。

如果你想在C ++中使用Java接口的效果,只需编写一个只包含纯虚拟成员函数的类,并使用virtual inheritance从中导出"实现"它在另一个班级。

Java被设计为比C ++更高级和更简单的语言,它们之间的权衡与任何高级和低级语言之间的权衡相同。 Java提供的灵活性稍差(例如单继承,对内存分配的控制很少),以换取更容易使用; C ++提供了更多的功能和灵活性,代价是“知道你正在做什么”#34;多一点。这些差异没问题;没有必要将一种语言转换为另一种语言。

答案 1 :(得分:-1)

  1. 随着更新,C ++变得越来越用户友好,变得越来越像java,但它不需要改变太多而不会破坏遗留代码。 Boost库或多或少是c ++语言的先驱,是有史以来(可能)最常用的库,并且采用了更简单,更直观的OO方法来实现c ++。 Boost库的功能最终会进入STD。

  2. 让我们举一个简单的例子:class manclass parent各自有workcry个函数。 class dad继承自manparent。现在,当您撰写cry并继承自class mom以及class woman时,您不必写两次parent

答案 2 :(得分:-1)

1.以明确的方式进行多重继承似乎更加用户友好,但事实并非如此。将来会有很多问题,如果你这样做,我的意思是你的项目中的一个实例明知故意,你会一次又一次地将相同的代码添加到你的最终类中,这会使你的项目变得更加复杂并使解释器混淆方法应该在适当的时候执行。

  1. 只需在C ++中考虑一下 A级 {      void display_a(){} } B级A
    {     void display_b(){} //这个类也包含'display_a()' } C A,B类//多重继承。 {    display_c(){} //这个类包含两次'display_a()'和一次'display_b()' }
  2. 所以类a包含两次'display_a()'这是我们在C ++中进行多重继承时遇到的问题,因此我们选择了Java中的接口来解决这个问题。