Java:一个类可以同时从两个超类继承吗?
我有一个班级旅行,我想做一个超班级和另一个班级计划旅行。 PlannedTourney类扩展了JFrame,因为它包含表单。然而,我也希望这个类扩展TourneyJava:一个类可以同时从两个超类继承吗?,java,inheritance,subclass,multiple-inheritance,superclass,Java,Inheritance,Subclass,Multiple Inheritance,Superclass,我有一个班级旅行,我想做一个超班级和另一个班级计划旅行。 PlannedTourney类扩展了JFrame,因为它包含表单。然而,我也希望这个类扩展Tourney 有没有一种可能的方法可以做到这一点?Java中没有多重继承。 这是语言不允许的。检查是否可以将设计更改为使用接口。(这几乎总是可能的)。不。Java中没有多重继承。这是一个深思熟虑的设计决定 如果您可以找到一种方法将其中一个超类表示为接口,那么这可能会解决您的问题。不,这在Java中是不可能的。通常,使用接口可以实现类似的效果(我认为
有没有一种可能的方法可以做到这一点?Java中没有多重继承。
这是语言不允许的。检查是否可以将设计更改为使用接口。(这几乎总是可能的)。不。Java中没有多重继承。这是一个深思熟虑的设计决定
如果您可以找到一种方法将其中一个超类表示为接口,那么这可能会解决您的问题。不,这在Java中是不可能的。通常,使用接口可以实现类似的效果(我认为Travel在这里可能是一个接口),但如果您希望继承方法实现,则必须重新考虑您的设计 根据您的描述,我的最佳猜测是,您可以将类划分为一个表示数据模型的层次结构,以及另一个扩展JFrame以显示数据的层次结构 定义:派生的类 来自另一个类的称为 子类(也是派生类, 扩展类或子类)。这个 从中创建子类的类 派生类称为超类(也称为 基类或父类) 对象除外,该对象没有 超类,每个类都有一个 只有一个直接超类(单个) 继承)。在没有任何 其他显式超类,每个类 隐式地是Object的子类 类可以从类派生 从 派生自类等,以及 最终源于最顶层 类,对象。这样的一个班级据说很有趣 是世界上所有阶级的后裔 继承链向后延伸 反对
我认为更好的方法可能是让PlannedTravel延长旅程,然后让PlannedTravel拥有JFrame的实例。这看起来像是一种一箭双雕的方法,这取决于你如何看待它。要么制作
旅程
扩展JFrame
要么制作旅程
界面。
选择对对象结构最有意义的选项
如果travel
扩展JFrame
有意义,那么就这样做。这样,当PlannedTourney
扩展Tourney
时,它还继承了Tourney
从JFrame
执行的所有操作
如果这没有意义,那么将旅程
作为一个界面,并让计划旅程
实现旅程
PlannedTourney
将无法从Tourney
继承任何代码,但您将能够继承方法签名,并将对象作为Tourney
以及JFrame
传递
使用Swing时,请确保将模型从视图中分离出来。数据应该存储在一组对象(模型)中,显示该数据的Swing组件应该是一组单独的对象(视图)。这有助于封装数据函数,将它们与GUI对象分离,并强制实现视图对模型的单向依赖。考虑到<代码>旅程对象可能需要一个
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几乎总是错误的。它总是可能的,并不总是最好的解决方案:)是的,这就是我的意思,有时,即使有可能,它也是