Java:访问隐藏接口字段

时间:2015-10-15 19:43:29

标签: java interface field

如何使用实现类的实例(thissuper或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;
    }
}

备注

  1. 我知道不建议使用实例访问静态成员,而不是静态访问静态成员(Type.staticMemberNameOrSignature)。

  2. 如图所示,继承静态接口字段时不会继承静态接口方法。

  3. 非注释行不会产生任何编译时错误。

  4. 试图为变量result赋值的注释行是生成编译时错误的行(添加到行中)

  5. 询问如何访问界面字段静态

  6. 澄清问题

    是否可以使用类的实例(类似thissuper的实例关键字)访问实现类隐藏的interfaces字段?< / p>

1 个答案:

答案 0 :(得分:2)

  

是否可以使用类的实例(像this或super这样的实例关键字)访问实现类隐藏的interfaces字段?

是。不要使用this或super,只需使用接口名称即可访问它。

MyInterface.str