在超类构造函数中定义与另一个常量相关的常量

时间:2014-10-21 11:46:24

标签: java constructor this parent super

我正在尝试通过super()构造函数定义常量。我的问题是我想要根据同一个类的另一个常量来定义它。让我告诉你我的代码。这是我的一个孩子课程:

public class Ball extends DisplayedObject {

    public static String FILENAME = "/res/ball_icon.png";
    public BufferedImage IMAGE;

    public Ball() {
        super(this);
    } 
}

这是父类:

public class DisplayedObject {

    public static String FILENAME;
    public BufferedImage IMAGE;

    public DisplayedObject(DisplayedObject obj) {
        InputStream is = getClass().getResourceAsStream(obj.FILENAME);
        try {
            obj.IMAGE = ImageIO.read(is);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Error: Can't read image.");
        }
    }
}

我知道用super()作为参数调用this是不可能的,因为此时没有定义对象。但这正是我的问题。我怎样才能在短时间内解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以将文件名传递给超类的构造函数:

public Ball() {
    super(FILENAME);
}

将IMAGE成员移动到超类:

public class DisplayedObject
{
    public BufferedImage IMAGE;
    ...
    public DisplayedObject(String filename) {
        InputStream is = getClass().getResourceAsStream(filename);
        try {
            IMAGE = ImageIO.read(is);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Error: Can't read image.");
        }
    }
}

BTW,IMAGE不是常数。