在以下情况下是否可以从 ClassB 访问变量/方法?
ClassB 在哪里实现 InterfaceA
InterfaceA object = new ClassB();
object.variable_from_classB
如何访问 B 类的方法和变量?
在以下情况下是否可以从 ClassB 访问变量/方法?
ClassB 在哪里实现 InterfaceA
InterfaceA object = new ClassB();
object.variable_from_classB
如何访问 B 类的方法和变量?
一般来说,这是不可能的。对于使用静态类型的 Java 等语言,您将收到编译错误。object
将背面投射到ClassB
,例如
((ClassB) object).variable_from_classB
会在你的情况下工作。如果您使用没有静态类型信息的语言,编译器通常没有机会确定该变量是否可以访问,甚至是否存在于对象中。这将在运行时决定。
在允许强制转换的静态类型语言中,运行时环境通常会检查强制转换并在失败时抛出错误。所以如果object
不是 type ClassB
,编译器就不会在上面一行报错。但是,由于无法将对象的具体类型强制转换为ClassB
.
虽然仅上述演员表是有效的,但这是不好的做法。至少,您应该事先检查转换是否成功,例如使用instanceof
或您的语言提供的任何运算符。如果您需要ClassB
访问.InterfaceA
ClassB
参考: