了解这一点至关重要,而且我似乎无法在任何地方找到信息,而且谷歌上面的括号也是不可能的。
代码中有一个printInfo方法和一个Wrench类,但是“((Class)object).method();”
答案 0 :(得分:3)
要扩展Maciej的答案...在Java中,您可以访问的方法和字段集取决于类型变量声明为 - 而不是它实际上是的对象的类型>在任何给定的时间点引用(可以是该声明类型的子类)。要访问子类的成员,您需要告诉Java要获取其成员的子类。你这样做的方式是通过强制转换操作符:(Class)object
。
这称为“向下转换”,意味着您将从超类类型转变为子类类型。如果对象实际上不是正确类型,则向下转换将抛出ClassCastException
。
因此,在上面的Maciej示例中,a
是声明为A
类型的引用。它的当前值是B
类型的对象,但为了获得B
个成员,您需要从A
类型的引用向下转换为B
类型的引用
关于额外的括号:由于运算符优先级,您不能只执行(Class)object.foo()
- Java会将其解释为(Class)(object.foo())
。因此,您通常会添加括号,以确保在 attemt之前发生 foo()
。
答案 1 :(得分:1)
它叫做铸造
看看这个
public class A {
//statements
}
public class B extends A {
public void foo() { }
}
A a=new B();
//To execute **foo()** method.
((B)a).foo();