如何使用实现类的实例(this
或super
或instanceName,如果可能)访问接口的字段(默认为public,static和final)如果该字段被隐藏?
package mypack;
public interface MyInterface {
String str = "MyInterface.str";
String inheritanceTest = "inherited";
}
我想访问的字段是str
另一个字段inheritanceTest
是为了证明接口字段实际上是继承的(与接口静态方法不同)
package mypack;
public class Child implements MyInterface {
// Hiding the field
String str = "Child.str";
// Access test.
public String getParentStr() {
String result = "";
// result = MyInterface.super.str; // No enclosing instance of the type MyInterface is accessible in scope
// result = super.str; //str cannot be resolved or is not a field
return result;
}
// A method to check if the field is inherited or not.
public String getInheritedString() {
return this.inheritanceTest;
}
}
备注
我知道不建议使用实例访问静态成员,而不是静态访问静态成员(Type.staticMemberNameOrSignature
)。
如图所示,继承静态接口字段时不会继承静态接口方法。
非注释行不会产生任何编译时错误。
试图为变量result
赋值的注释行是生成编译时错误的行(添加到行中)
我不询问如何访问界面字段静态。
澄清问题
是否可以使用类的实例(类似this
或super
的实例关键字)访问实现类隐藏的interfaces字段?< / p>
答案 0 :(得分:2)
是否可以使用类的实例(像this或super这样的实例关键字)访问实现类隐藏的interfaces字段?
是。不要使用this或super,只需使用接口名称即可访问它。
MyInterface.str