我有一个班级旅程,我想制作一个超级班级和另一个班级计划旅程。计划的旅程类扩展了 JFrame,因为它包含表单..但是我也希望这个类扩展旅程..
有没有可能的方法来做到这一点?
我有一个班级旅程,我想制作一个超级班级和另一个班级计划旅程。计划的旅程类扩展了 JFrame,因为它包含表单..但是我也希望这个类扩展旅程..
有没有可能的方法来做到这一点?
不要混合模型和视图。如果您将两个域明确分开,那么您将不需要多重继承(这次)。
您有一个用于旅程的模型类和一个用于此类旅程的查看器。查看器应该子类化并在您的窗口(一个实例)Component
中显示(某处)。JFrame
此查看器获取一个旅程对象并呈现旅程的属性。Journey
单独拥有关于旅程的所有信息,只有查看者知道如何向用户呈现旅程:
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, ...)
}
}
现在您可以创建一个 PlannedJourney 实例并将其添加到应用程序JFrame
的适当位置。
Java中没有多重继承。语言不允许。检查您是否可以将设计更改为使用接口。(这几乎总是可能的)。
不,这在 Java 中是不可能的。通常,使用接口可以实现类似的效果(我认为 Journey 可能在这里是一个接口),但是如果您希望继承方法实现,那么您将不得不重新考虑您的设计。
根据您的描述,我最好的猜测是,您可以将您的类分成一个代表数据模型的层次结构,以及另一个扩展 JFrame 以显示数据的层次结构。
来自Sun Java 教程的继承页面
定义:从另一个类派生的类称为子类(也称为派生类、扩展类或子类)。派生子类的类称为超类(也是基类或父类)。
除了没有超类的 Object 之外,每个类都有一个且只有一个直接超类(单继承)。在没有任何其他显式超类的情况下,每个类都隐含地是 Object 的子类。
类可以从从类派生的类派生的类派生,依此类推,并最终从最顶层的类 Object 派生。据说这样的类是继承链中所有类的后裔,这些类一直延伸到 Object。
要么做Journey
扩展JFrame
,要么做Journey
一个接口。
选择对您的对象结构最有意义的选项。
Journey
如果扩展有意义,JFrame
那么就这样做。这样,当PlannedJourney
extends时,它也继承了from所做的Journey
一切。Journey
JFrame
如果这没有意义,那就做Journey
一个接口,并有PlannedJourney
实现Journey
。 PlannedJourney
将无法从 继承任何代码Journey
,但您将能够继承方法签名并将对象作为 a 和 aJourney
传递JFrame
。
确保在使用 Swing 时将Model从View中分离出来。您的数据应该存储在一组对象(模型)中,并且显示该数据的 Swing 组件应该是一组单独的对象(视图)。这有助于封装数据函数,将它们与 GUI 对象分开,并强制视图对模型的单向依赖。考虑一个Journey
对象可能需要 aJourneyFrame
来显示。这样,JourneyFrame
可以只显示它,并且可以扩展JFrame
和只携带对 的引用Journey
,它可以有自己的层次结构。
如果您还没有阅读 Joshua Bloch 的“Effective Java”,那么现在是时候阅读了。特别是“优先组合优于继承”部分。由于您不能在 Java 中进行多重继承,他解释了为什么在几乎所有情况下正确的方法是让您的 JFrame 扩展包含对作为 UI 的 PlannedJourney 的引用。
Java 中的多重继承是不可能的。
接口的多重实现是可能的,这是最接近 Java 中多重继承的东西。
如果可能的话,支持组合而不是继承。引自 Effective Java。
不,Java 中没有多重继承。这是一个深思熟虑的设计决定。
如果您可以找到一种方法将其中一个超类表示为接口,那么这可能会解决您的问题。
我认为更好的方法可能是让 PlannedJourney 扩展 Journey,然后让 PlannedJourney 有一个 JFrame 实例。这看起来像是一种用一块石头杀死两只鸟的方法,这取决于你如何看待它。
不完全确定您想要什么,但多重继承在 Java 中是非常可能且常见的事情。首先,当一个类从另一个类继承时,如果该类也是另一个类的子类,它将把继承的方法传递给它的子类。其次,在 Java 中有一个编码字符串,也称为“接口”,这允许一个类从多个类继承而无需扩展一个类。