繁体   English   中英

Java将变量添加到超类

[英]Java adding variables to super class

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

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

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

这是可能的,没有任何问题。 但是我也可以在其他班级上这样做吗? 就我而言,我想使用Image来做到这一点-但这似乎是不可能的,当我添加extends Image我必须实现所需的方法,这意味着我必须编写一个新的Image类。 还有其他可能吗?

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

java.awt.Image是一个abstract类。

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

如果您扩展了非抽象类,则将实现这些方法,因此您可以选择重写它们(只要它们不是final或类本身不是final )。

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

是进一步研究的良好起点。

Image是一个抽象类,您想扩展它的子类之一,即BufferedImageVolatileImage

为了执行所需的操作,您必须有权访问扩展您实际使用的Image的具体类。 如果您具有该访问权限,则可以创建一个使用添加的变量对其进行扩展的类。

考虑例如java.util.AbstractList和java.util.ArrayList。 您可以扩展ArrayList,并且仅实现您要添加的内容。 您将必须实现更多才能扩展AbstractList。

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

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

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

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

暂无
暂无

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

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