0

我有一个普遍的问题:是否可以创建一个类,它是另一个类的原始副本,但包含其他变量?

例如,我知道 JPanel 可以做到这一点:

public class CustomPanel extends JPanel{
    int exampleVariable = 0;
}

这是可能的,没有任何问题。但是我也可以在其他课程上这样做吗?在我的情况下,我想这样做Image- 但这似乎是不可能的,当我添加时extends Image我必须实现所需的方法,这意味着我必须编写一个新的 Image 类。有可能以另一种方式吗?

编辑:我的目标是添加一种设置图像名称的方法......

4

4 回答 4

5

java.awt.Image是一个abstract类。

因此,您必须在扩展它时覆盖它的所有方法。

如果你扩展一个非抽象类,方法就会被实现,因此你可以选择覆盖它们(只要它们不是final——或者类本身不是final)。

但是,一个abstract类被专门设计为通过实现其方法来扩展@Override

是进一步调查的一个很好的起点。

于 2013-07-27T17:33:33.767 回答
2

Image是一个抽象类,你想扩展它的一个子类,要么BufferedImage要么VolatileImage

于 2013-07-27T17:33:31.590 回答
1

为了做你想做的事,你必须有权访问扩展你真正使用的 Image 的具体类。如果您具有该访问权限,则可以创建一个使用添加的变量对其进行扩展的类。

例如,考虑 java.util.AbstractList 和 java.util.ArrayList。您可以扩展 ArrayList,并且只实现您想要添加的内容。您将不得不实现更多来扩展 AbstractList。

在某些情况下,实现类是私有的,并且可能会根据情况在运行之间发生变化,因此并不总是可能的。

如果您无法确定要扩展的正确具体 Image 子类,我建议考虑组合。创建一个具有 Image 引用的类、返回它的方法 getImmage 以及要与 Image 关联的数据。传递并存储对您的类实例的引用,但是当您需要执行 Image 操作时,请使用 getImage 方法来获取 Image 引用。

于 2013-07-27T17:44:17.147 回答
1

Image是一个抽象类。所以,如果你扩展它,你将不得不实现它的所有抽象方法,这就像重新发明整个轮子一样。但是,您可以扩展已经实现 Image 类并已在其中实现所有方法的类。例如:BufferedImage。它会是这样的:

public class CustomImage extends BufferedImage{
    // Override its non final methods of your concern..
}
于 2013-07-27T17:48:50.103 回答