当前位置: 首页 > 知识库问答 >
问题:

多重继承转换,构造函数链接[重复]

刁浩言
2023-03-14

我通过各种站点了解java不支持多重继承。其中一个原因是为了避免像强制转换和构造函数链接这样的问题。多重继承如何导致Java中的强制转换和构造函数链接问题?有人能举例给我解释一下吗。

共有1个答案

钱安和
2023-03-14

多重继承可能成为一个问题有多种原因,为了防止这些问题,Java根本不允许它。主要的问题是钻石的继承,也就是钻石问题。假设你有超类动物,亚类土地和水。现在,假设您创建了另一个类Frogs。因为青蛙可以生活在水里,也可以生活在陆地上,所以你决定青蛙类将从陆地和水域中与生俱来。所以它将是陆地和水的一个子类。

让我们扩展我们的场景,假设动物类有一个move方法。这种方法让动物旅行一段距离,但没有说明它们是如何这样做的。land子类重写这个move方法以指定动物正在行走。同时,water子类重写以指定动物正在游泳。如果一只青蛙试图移动,它不会知道自己是在游泳,还是在走路。这会导致一些严重的问题,也是EJP所涉及的基本问题。

 类似资料:
  • 问题内容: 在为期末考试而学习时,我在正在学习的书中遇到了以下陈述。考虑以下代码: 是否必须在类B(super(x))的构造函数中调用类A的构造函数。本书指出这不是强制性的,因为它们具有确切数量和类型的参数。但是,当我在Java编译器中尝试此操作时,会抛出以下错误: 类A中的构造函数A不能应用于给定类型;必需:发现整数:无参数原因:实际和正式参数列表的长度不同 问题答案: 编译器会自动插入开头。

  • 问题内容: 我想知道为什么在Java中不继承构造函数?你知道当你上这样的课时: 稍后当你从继承时Super,java会抱怨没有定义默认的构造函数。解决方案显然是这样的: 这段代码是重复的,而不是干的和无用的(IMHO)…因此再次带来了问题: 为什么Java不支持构造函数继承?不允许这种继承有什么好处? 问题答案: 假设构造函数是继承的…则因为每个类最终都派生自Object,所以每个类最终都将带有无

  • 问题内容: 我想要一个构造函数,其参数会自动被所有子类继承,但是Java不允许我这样做 我不希望有写,等等。每个子类。有没有更聪明的方法来解决这个问题? 解决方案#1。构造一个可以在构造函数之后调用的方法。尽管对我的特定设计而言,这是可行的,但是我希望要求用户在构造函数中指定在编译时经过验证的某些参数(例如,不通过varargs / reflection)。 问题答案: 你不能 如果要在基类中有一

  • 人们有时会对类成员函数或成员变量的作用域问题感到困惑,尤其是,当基类与派生类的同名成员不在同一个作用域内时: struct B { void f(double); }; struct D : B { void f(int); }; B b; b.f(4.5); // OK // 调用的到底是B::f(doube)还是D::f(int)呢? // 实际情况往往会让人感到意外

  • 我有一个继承自父类Point的子类行,我没有在子类中使用基类的构造函数,但是我得到了这个错误: '形状。点“不包含接受0个参数的构造函数 这是我的父类: 这是我的孩子班:

  • 主要内容:多继承下的构造函数,命名冲突在前面的例子中,派生类都只有一个基类,称为 单继承(Single Inheritance)。除此之外, C++也支持 多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、 C#、 PHP 等干脆取消了多继承。 多继承的语法也很简单,将多个基类用逗号隔开即可。例如已声明了类A