从实现接口的类访问变量

时间:2013-06-30 19:27:47

标签: variables object interface polymorphism

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

ClassB实现InterfaceA

的地方
InterfaceA object = new ClassB();

object.variable_from_classB

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

1 个答案:

答案 0 :(得分:0)

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

((ClassB) object).variable_from_classB

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

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

虽然上述演员单独有效,但这是不好的做法。至少,您应该事先检查演员表是否成功,例如:使用instanceof或您的语言提供的任何运算符。如果您需要访问ClassB的字段/方法,那么使用InterfaceA类型的变量/参数而不是ClassB会更好。

<强>参考文献: