有人可以解释以下表达式的作用吗?
System.out.println(((Window)this).size)
假设我们有这个:
System.out.println(this.size)
我理解这个表达式的作用,但我不明白它的作用,所以问题是关键字 before 的(Window)
含义是什么(假设它是我在这个例子中使用的类的超类)?(Window)
this
Window
有人可以解释以下表达式的作用吗?
System.out.println(((Window)this).size)
假设我们有这个:
System.out.println(this.size)
我理解这个表达式的作用,但我不明白它的作用,所以问题是关键字 before 的(Window)
含义是什么(假设它是我在这个例子中使用的类的超类)?(Window)
this
Window
该(Window) this
表达式正在转换对类的this
引用Window
。强制转换将对象引用从一个类转换为另一个(相关)类。例如,在 Java 中,经常将Graphics
对象转换为Graphics2D
对象,如下所示:
Graphics g;
Graphics2D g2d = (Graphics2D) g;
您认为这Window
是相关类的超类是正确的;如果它是一个不相关的类,你会得到一个编译时错误。
转换为子类(如上面的图形对象示例)可以为您提供更多功能。例如,Graphics2D
对象具有Graphics
对象没有的方法(例如,fill
和setRenderingHint
)。
它是类型转换......就像你做的integer
那样float
float b= (float)1;
一般来说是没有意义的。
我认为这在以下场景中会很有用:
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 - 尺寸
因此,需要显式强制转换(对其自己的父级)才能访问父级中的字段。