有人可以解释以下表达式的作用吗?
System.out.println(((Window)this).size)
假设我们有这个:
System.out.println(this.size)
我理解这个表达式的作用,但我不明白(Window)
的作用,所以问题是(Window)
在关键字this
之前的意义是什么(让我们看看假设Window
是我在本例中使用的类的超类?)
答案 0 :(得分:4)
(Window) this
表达式正在向this
类投射Window
引用。 强制转换将对象引用从一个类转换为另一个类(相关)类。例如,在Java中,有人经常将Graphics
个对象转换为Graphics2D
个对象,如下所示:
Graphics g;
Graphics2D g2d = (Graphics2D) g;
你认为Window
是相关类的超类是正确的;如果它是一个不相关的类,你会得到一个编译时错误。
转换为子类(如上例中的图形对象)可以为您提供更多功能。例如,Graphics2D
对象具有Graphics
个对象不具有的方法(例如,fill
和setRenderingHint
)。
答案 1 :(得分:3)
是类型铸造......
就像您将integer
转换为float
float b= (float)1;
答案 2 :(得分: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 - Size P - Size
因此,需要显式转换(对于它自己的父级)来访问父级中的字段。