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