繁体   English   中英

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

[英]Java: Can a class inherit from two super classes at the same time?

我有一个课程Journey,我想创建一个超级课程和另一个课程计划之旅。 计划的旅程类扩展了JFrame,因为它包含表单..但是我也希望这个类扩展Journey ..

有可能这样做吗?

不要混合模型和视图。 如果您将两个域明确分开,那么您将不需要多重继承(这次)。

您有一个用于旅程的模型类和用于此类旅程的查看器。 查看器应该子类化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中没有多重继承。 语言不允许这样做。 检查您是否可以将设计更改为使用Interface。 (这几乎总是可能的)。

不,这不可能用Java。 通常,使用接口可以实现类似的效果(我认为Journey可能是这里的接口),但是如果您希望继承方法实现,那么您将不得不重新考虑您的设计。

我从你的描述中得到的最好的猜测是,你可以将你的类分成一个代表数据模型的层次结构,另一个扩展JFrame来显示数据。

Sun Java Tutorial的“ 继承”页面

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

Excepting Object,没有超类, 每个类都有一个且只有一个直接超类(单继承) 在没有任何其他显式超类的情况下,每个类都隐式地是Object的子类。

类可以从派生自类的类派生的类派生,依此类推,最终派生自最顶层的类Object。 据说这样的类是继承链中延伸回Object的所有类的后代。

Journey扩展JFrame或使Journey成为一个界面。

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

如果Journey扩展JFrame是有意义的,那么就这样做。 这样,当PlannedJourney扩展Journey ,它还继承了JourneyJFrame所做的一切。

如果这没有意义,那么让Journey成为一个界面,并让PlannedJourney实现Journey PlannedJourney将无法继承Journey任何代码,但除了作为JFrame之外,您还可以继承方法签名并将对象作为Journey传递。


确保在使用Swing时,您正在从视图中分离出模型 您的数据应存储在一组对象( Model )中,而Swing组件应显示该数据应该是一组单独的对象( View )。 这有助于封装数据函数,将它们与GUI对象分离,并强制对模型上的View进行单向依赖。 考虑到Journey对象应该要求显示JourneyFrame 通过这种方式, JourneyFrame可以只显示它,并且可以扩展JFrame并仅带有对Journey的引用, Journey可以有自己的层次结构。

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

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

我认为更好的方法可能是让PlannedJourney扩展Journey,然后让PlannedJourney拥有一个JFrame实例。 它看起来像一种方法,一石二鸟,取决于你如何看待它。

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

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

如果可能的话,赞成组合而不是继承。 引自取自Effective Java。

如果你还没有读过Joshua Bloch的“Effective Java”,现在是时候了。 特别是“赞成组成而不是继承”这一节。 由于你不能在Java中做多重继承,他解释了为什么在几乎所有情况下,正确的方法是让你的JFrame扩展包含对PlannedJourney的引用,它是用户界面。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM