这是什么意思:((扳手)扳手).printInfo();

时间:2013-08-28 19:42:00

标签: java class object methods

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

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

2 个答案:

答案 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();