有人可以解释以下表达式的作用吗?
System.out.println(((Window)this).size)
假设我们有这个:
System.out.println(this.size)
我理解这个表达式的作用,但我不明白它的作用,所以问题是关键字 before 的(Window)含义是什么(假设它是我在这个例子中使用的类的超类)?(Window)thisWindow
有人可以解释以下表达式的作用吗?
System.out.println(((Window)this).size)
假设我们有这个:
System.out.println(this.size)
我理解这个表达式的作用,但我不明白它的作用,所以问题是关键字 before 的(Window)含义是什么(假设它是我在这个例子中使用的类的超类)?(Window)thisWindow
该(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 - 尺寸
因此,需要显式强制转换(对其自己的父级)才能访问父级中的字段。