0

在以下情况下是否可以从 ClassB 访问变量/方法?

ClassB 在哪里实现 InterfaceA

InterfaceA object = new ClassB();

object.variable_from_classB

如何访问 B 类的方法和变量?

4

1 回答 1

0

一般来说,这是不可能的。对于使用静态类型的 Java 等语言,您将收到编译错误。object将背面投射到ClassB,例如

((ClassB) object).variable_from_classB

会在你的情况下工作。如果您使用没有静态类型信息的语言,编译器通常没有机会确定该变量是否可以访问,甚至是否存在于对象中。这将在运行时决定。

在允许强制转换的静态类型语言中,运行时环境通常会检查强制转换并在失败时抛出错误。所以如果object不是 type ClassB,编译器就不会在上面一行报错。但是,由于无法将对象的具体类型强制转换为ClassB.

虽然仅上述演员表是有效的,但这是不好的做法。至少,您应该事先检查转换是否成功,例如使用instanceof或您的语言提供的任何运算符。如果您需要ClassB访问.InterfaceAClassB

参考:

于 2013-06-30T19:50:42.463 回答