我有一个课程旅程,我想创建一个超级课程和另一个课程计划之旅。 计划的旅程类扩展了JFrame,因为它包含表单。但是我也想让这个类扩展Journey ..
有可能这样做吗?
答案 0 :(得分:4)
不要混合模型和视图。如果您将两个域明确分开,那么您将不需要多重继承(这次)。
您有一个旅程模型类和此类旅程的查看器。查看器应该子类化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
。
答案 1 :(得分:3)
Java中没有多重继承。 语言不允许这样做。检查您是否可以将设计更改为使用Interface。 (这几乎总是可能的)。
答案 2 :(得分:2)
Java无法做到这一点。通常,使用接口可以实现类似的效果(我认为Journey可能是这里的接口),但是如果您希望继承方法实现,那么您将不得不重新考虑您的设计。
我从你的描述中得到的最好的猜测是你可以将你的类分成一个代表数据模型的层次结构,另一个扩展JFrame来显示数据。
答案 3 :(得分:2)
定义:派生的类 从另一个类叫做a 子类(也是派生类, 扩展课程或儿童课程)。该 子类所在的类 derived被称为超类(也是一个 基类或父类)。
Excepting Object,没有 超类,每个班级都有一个和 只有一个直接超类(单身 继承)即可。在没有任何 其他显式超类,每个类 隐式地是Object的子类。
可以从类派生类 派生自的类 派生自类,等等 最终来自最顶层 class,Object。据说这样一堂课 是所有班级的后裔 继承链向后延伸 对象。
答案 4 :(得分:2)
让Journey
延长JFrame
或使Journey
成为界面。
选择对您的对象结构最有意义的选项。
如果Journey
延长JFrame
是有意义的,那么就这样做。这样,当PlannedJourney
扩展Journey
时,它还会继承Journey
从JFrame
执行的所有操作。
如果这没有意义,那么让Journey
成为一个界面,让PlannedJourney
实现Journey
。 PlannedJourney
将无法继承Journey
中的任何代码,但您可以继承方法签名并将对象作为Journey
传递给JFrame
}。
确保在使用Swing时,您正在从 View 中分离出 Model 。您的数据应存储在一组对象( Model )中,Swing组件显示该数据应该是一组单独的对象( View )。这有助于封装数据函数,将它们与GUI对象分离,并在模型上强制执行 View 的单向依赖。考虑一个Journey
对象应该要求显示JourneyFrame
。这样,JourneyFrame
可以只显示它,并且可以扩展JFrame
并且只带有Journey
的引用,{{1}}可以有自己的层次结构。
答案 5 :(得分:1)
没有。 Java中没有多重继承。这是一个深思熟虑的设计决定。
如果你能找到一种方法将一个超类表达为一个接口,那么这可能会解决你的问题。
答案 6 :(得分:1)
我认为更好的方法可能是让PlannedJourney扩展Journey然后让PlannedJourney拥有一个JFrame实例。它看起来像是一种一石二鸟的方法,取决于你如何看待它。
答案 7 :(得分:1)
Java中的多重继承是不可能的。
接口的多个实现是可能的,这是你得到的Java中最接近多重继承的东西。
如果可能的话,赞成合成而不是继承。报价取自Effective Java。
答案 8 :(得分:1)
如果你还没有读过Joshua Bloch的“Effective Java”,现在是时候了。特别是“赞成组成而不是继承”这一节。由于你不能在Java中做多重继承,他解释了为什么在几乎所有情况下,正确的方法是让你的JFrame扩展包含对PlannedJourney的引用,它是用户界面。
答案 9 :(得分:0)
不完全确定你想要什么,但多重继承是Java中非常可能和常见的事情。首先,当一个类继承自另一个类时,如果该类也是另一个类的子类,它将把它继承的方法传递给它的子类。其次,在Java中有一串编码,也称为“接口”,这允许类从多个类继承而不扩展类。