Java将变量添加到超类中

时间:2013-07-27 17:29:40

标签: java superclass extends

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

例如我知道这可以通过JPanel实现:

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

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

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

4 个答案:

答案 0 :(得分:5)

java.awt.Imageabstract类。

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

如果扩展非抽象类,则实现方法,因此您可以选择覆盖它们(只要它们不是final - 或者类本身不是final) 。

但是,abstract类是专门为通过@Override实现其方法而扩展而设计的。

Here是进一步调查的良好起点。

答案 1 :(得分:2)

Image是一个抽象类,您希望扩展其中一个子类,BufferedImageVolatileImage

答案 2 :(得分:1)

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

例如,考虑java.util.AbstractList和java.util.ArrayList。您可以扩展ArrayList,只实现您想要添加的内容。您必须实现更多以扩展AbstractList。

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

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

答案 3 :(得分:1)

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

public class CustomImage extends BufferedImage{
    // Override its non final methods of your concern..
}