我有一个普遍的问题: 是否可以创建一个类,它是另一个类的原始副本,但包含其他变量?
例如我知道这可以通过JPanel实现:
public class CustomPanel extends JPanel{
int exampleVariable = 0;
}
这是可能的,没有任何问题。但我也可以和其他课程一起做吗?在我的情况下,我想用Image
执行此操作 - 但这似乎不可能,当我添加extends Image
时,我必须实现所需的方法,这意味着我必须编写一个新的图像类。是否有可能以另一种方式?
编辑:我的目的是添加一个方法来设置图像名称......
答案 0 :(得分:5)
java.awt.Image
是abstract
类。
因此,必须在扩展它时覆盖其所有方法。
如果扩展非抽象类,则实现方法,因此您可以选择覆盖它们(只要它们不是final
- 或者类本身不是final
) 。
但是,abstract
类是专门为通过@Override
实现其方法而扩展而设计的。
Here是进一步调查的良好起点。
答案 1 :(得分:2)
Image
是一个抽象类,您希望扩展其中一个子类,BufferedImage
或VolatileImage
。
答案 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..
}