java - 这是什么意思 : ((Wrench)wrench). printInfo();

标签 java class object methods

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

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

最佳答案

为了扩展 Maciej 的答案......在 Java 中,您有权访问的方法和字段集取决于变量的类型声明为 - 而不是它实际的对象类型>在任何给定时间点引用(可以是该声明类型的子类)。要访问子类的成员,您需要告诉 Java 您想要访问其成员的子类。实现这一点的方法是通过强制转换运算符:(Class)object

这称为“向下转型”,意味着您将从父类(super class)类型转换为子类类型。如果对象实际上不是正确的类型,则向下转型将抛出 ClassCastException

因此,在上面 Maciej 的示例中,a 是声明为类型 A 的引用。它的当前值是类型 B 的对象,但要获取 B 的成员,您需要从类型 A 的引用向下转换为B 类型的引用。

关于额外的括号:由于运算符优先级,您不能只执行 (Class)object.foo() – Java 会将其解释为 (Class)(object.foo ())。因此,您通常会添加括号以确保转换发生在尝试调用 foo() 之前。

关于java - 这是什么意思 : ((Wrench)wrench). printInfo();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496877/

相关文章:

任何数据的 Python 通用包装类

javascript - JS 静态属性与使用类名添加属性

java - 将两个列表结构链接在一起

java - Android 位置距离到邻近范围内

java - getSupportLoaderManager(id, args, ??) 的第三个参数类型是什么

java - 在 Java EE 项目中,删除我的类后,我无法取回它们?

java - Java 中的 Tree 实现是否保存整个下一个节点 v/s 仅保存 C 中的地址

多个目标文件中的 C++ 模板和编译

JavaScript 对象数组

java - 什么比较好 : to allow Services to access several DAOs or only other Services