Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:一个类可以同时从两个超类继承吗?_Java_Inheritance_Subclass_Multiple Inheritance_Superclass - Fatal编程技术网

Java:一个类可以同时从两个超类继承吗?

Java:一个类可以同时从两个超类继承吗?,java,inheritance,subclass,multiple-inheritance,superclass,Java,Inheritance,Subclass,Multiple Inheritance,Superclass,我有一个班级旅行,我想做一个超班级和另一个班级计划旅行。 PlannedTourney类扩展了JFrame,因为它包含表单。然而,我也希望这个类扩展Tourney 有没有一种可能的方法可以做到这一点?Java中没有多重继承。 这是语言不允许的。检查是否可以将设计更改为使用接口。(这几乎总是可能的)。不。Java中没有多重继承。这是一个深思熟虑的设计决定 如果您可以找到一种方法将其中一个超类表示为接口,那么这可能会解决您的问题。不,这在Java中是不可能的。通常,使用接口可以实现类似的效果(我认为

我有一个班级旅行,我想做一个超班级和另一个班级计划旅行。 PlannedTourney类扩展了JFrame,因为它包含表单。然而,我也希望这个类扩展Tourney


有没有一种可能的方法可以做到这一点?

Java中没有多重继承。
这是语言不允许的。检查是否可以将设计更改为使用接口。(这几乎总是可能的)。

不。Java中没有多重继承。这是一个深思熟虑的设计决定


如果您可以找到一种方法将其中一个超类表示为接口,那么这可能会解决您的问题。

不,这在Java中是不可能的。通常,使用接口可以实现类似的效果(我认为Travel在这里可能是一个接口),但如果您希望继承方法实现,则必须重新考虑您的设计

根据您的描述,我的最佳猜测是,您可以将类划分为一个表示数据模型的层次结构,以及另一个扩展JFrame以显示数据的层次结构

定义:派生的类 来自另一个类的称为 子类(也是派生类, 扩展类或子类)。这个 从中创建子类的类 派生类称为超类(也称为 基类或父类)

对象除外,该对象没有 超类,每个类都有一个 只有一个直接超类(单个) 继承)。在没有任何 其他显式超类,每个类 隐式地是Object的子类

类可以从类派生 从 派生自类等,以及 最终源于最顶层 类,对象。这样的一个班级据说很有趣 是世界上所有阶级的后裔 继承链向后延伸 反对


我认为更好的方法可能是让PlannedTravel延长旅程,然后让PlannedTravel拥有JFrame的实例。这看起来像是一种一箭双雕的方法,这取决于你如何看待它。

要么制作
旅程
扩展
JFrame
要么制作
旅程
界面。

选择对对象结构最有意义的选项

如果
travel
扩展
JFrame
有意义,那么就这样做。这样,当
PlannedTourney
扩展
Tourney
时,它还继承了
Tourney
JFrame
执行的所有操作

如果这没有意义,那么将
旅程
作为一个界面,并让
计划旅程
实现
旅程
PlannedTourney
将无法从
Tourney
继承任何代码,但您将能够继承方法签名,并将对象作为
Tourney
以及
JFrame
传递



使用Swing时,请确保将模型从视图中分离出来。数据应该存储在一组对象(模型)中,显示该数据的Swing组件应该是一组单独的对象(视图)。这有助于封装数据函数,将它们与GUI对象分离,并强制实现视图对模型的单向依赖。考虑到<代码>旅程对象可能需要一个 TraveyFrase来显示。通过这种方式,
JourneyFrame
可以只显示它,并且可以扩展
JFrame
,只携带对
Journey
的引用,它可以有自己的层次结构。

Java中的多重继承是不可能的

接口的多个实现是可能的,这是Java中最接近多重继承的东西


如果可能的话,支持组合而不是继承。引用有效的Java。

不要混用模型和视图。如果将两个域清楚地分开,那么就不需要多重继承(这次)

您有一个用于旅行的模型类和一个用于此类旅行的查看器。查看器应该子类化
Component
,并显示在窗口(一个
JFrame
实例)的某个地方

此查看器获取一个旅程对象并显示旅程的属性<代码>旅程单独拥有关于旅程的所有信息,只有观众知道如何向用户展示旅程:

 public class PlannedJourney extends JPanel {
   private Journey journey;
   public JourneyViewer(Journey journey) {
     this.journey = journey;

     // build this panel based on the journey object
     // (add labels, subpanels, widgets, ...)
   }
 }

现在,您可以创建PlannedTravely的一个实例,并将其添加到相应位置的应用程序
JFrame

如果您还没有阅读Joshua Bloch的《高效Java》,现在是时候这样做了。特别是“偏爱组合而非继承”一节。由于您不能在Java中执行多重继承,他解释了为什么在几乎所有情况下,正确的方法都是让JFrame扩展包含一个对PlannedTourney的引用,它是UI。

不完全确定您想要什么,但多重继承在Java中是非常可能和常见的事情。首先,当一个类从另一个类继承时,如果该类也是另一个类的子类,它将把继承的方法传递给它的子类。其次,在Java中有一个称为“接口”的编码字符串,这允许一个类从多个类继承而不扩展一个类。

no。Java中没有多重继承。检查一下,从Swing组件生成子类很少是个好主意。这些班级已经很大了。最好使用作文(你的班级将参考框架)。在几秒钟内有相当多的答案,你可以通过查看已经存在的问题(和答案!)来避免这些答案:)扩展JFrame几乎总是错误的。它总是可能的,并不总是最好的解决方案:)是的,这就是我的意思,有时,即使有可能,它也是