在以下情况下,是否可以从ClassB访问变量/方法?
ClassB实现InterfaceA
的地方InterfaceA object = new ClassB();
object.variable_from_classB
如何访问B类的方法和变量?
答案 0 :(得分:0)
一般来说,这是不可能的。对于使用静态类型的Java等语言,您将收到编译错误。将object
转发回ClassB
,例如
((ClassB) object).variable_from_classB
适用于您的情况。如果使用没有静态类型信息的语言,编译器通常无法确定是否可以访问变量或甚至是否存在于对象中。这将在运行时决定。
在允许强制转换的静态类型语言中,运行时环境通常会检查强制转换并在失败时抛出错误。因此,如果object
不是ClassB
类型,编译器将不会在上面的行上报告错误。但是,强制转换会在运行时失败,因为对象的具体类型无法强制转换为ClassB
。
虽然上述演员单独有效,但这是不好的做法。至少,您应该事先检查演员表是否成功,例如:使用instanceof
或您的语言提供的任何运算符。如果您需要访问ClassB
的字段/方法,那么使用InterfaceA
类型的变量/参数而不是ClassB
会更好。
<强>参考文献: