2

有人可以解释以下表达式的作用吗?

System.out.println(((Window)this).size)

假设我们有这个:

System.out.println(this.size)

我理解这个表达式的作用,但我不明白它的作用,所以问题是关键字 before 的(Window)含义是什么(假设它是我在这个例子中使用的类的超类)?(Window)thisWindow

4

3 回答 3

4

(Window) this表达式正在转换对类的this引用Window强制转换将对象引用从一个类转换为另一个(相关)类。例如,在 Java 中,经常将Graphics对象转换为Graphics2D对象,如下所示:

Graphics g;
Graphics2D g2d = (Graphics2D) g;

您认为这Window是相关类的超类是正确的;如果它是一个不相关的类,你会得到一个编译时错误。

转换为子类(如上面的图形对象示例)可以为您提供更多功能。例如,Graphics2D对象具有Graphics对象没有的方法(例如,fillsetRenderingHint)。

于 2013-03-10T19:46:29.997 回答
3

它是类型转换......就像你做的integer那样float

float b= (float)1;
于 2013-03-10T19:46:31.023 回答
3

一般来说是没有意义的。

我认为这在以下场景中会很有用:

class P {
    protected String size = "P - Size";
}

class C extends P {
    protected String size = "C - Size";

    public void m() {
        System.out.println(this.size);
        System.out.println(((P)this).size);
    }

    public static void main(String... args) {
        new C().m();
    }
}

这里的输出是:

C - 尺寸
P - 尺寸

因此,需要显式强制转换(对其自己的父级)才能访问父级中的字段。

于 2013-03-10T20:02:21.737 回答