0

理解这一点现在至关重要,我似乎无法在任何地方找到信息,而且用括号在谷歌上搜索是不可能的。

代码中有一个 printInfo 方法和一个 Wrench 类,但是“ ((Class)object).method(); ”是什么

4

2 回答 2

3

为了扩展 Maciej 的答案......在 Java 中,您可以访问的方法和字段集取决于变量被声明为的类型——而不是它在任何给定时间点实际引用的对象的类型(可能是该声明类型的子类)。要访问子类的成员,您需要告诉 Java 子类您想要访问的成员。而你这样做的方式是通过一个演员运算符:(Class)object

这被称为“向下转型”,这意味着您将从超类类型转变为子类类型。ClassCastException如果对象实际上不是正确的类型,向下转型将抛出 a 。

所以在上面 Maciej 的例子中,a是一个声明为 type 的引用A。它的当前值是一个类型的对象B,但要获取 atB的成员,您需要从类型的引用向下转换为类型A的引用B

关于额外的括号:由于运算符优先级,您不能只是这样做(Class)object.foo()- Java 会将其解释为(Class)(object.foo()). 因此,您通常会添加括号以确保强制转换发生尝试调用foo().

于 2013-08-28T22:44:57.163 回答
1

它叫做 Casting
看看这个

public class A {
  //statements
}

public class B extends A {
  public void foo() { }
}

A a=new B();

//To execute **foo()** method.

((B)a).foo();
于 2013-08-28T20:30:56.107 回答