2015-10-15 2 views
1

Как получить доступ к полю интерфейса (который по умолчанию является общедоступным, статическим и окончательным) с использованием экземпляра класса реализации (или super или instanceName, если это возможно), если поле скрыто?Java: доступ к полю скрытого интерфейса

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. Я не с просьбой о том, как получить доступ к области интерфейса Статический.

уточняющий вопрос

Можно ли получить доступ к области интерфейсов, которые были скрыты от реализующего класса с помощью экземпляра (экземпляра ключевые слова, как this или super) класса?

+2

'return MyInterface.str;' –

+0

Тот факт, что это интерфейс, не имеет значения. –

+0

@SotiriosDelimanolis Вопрос обновлен. – naaz

ответ

1

Возможно ли получить доступ к полю интерфейсов, которые были скрыты с помощью класса-реализации, используя экземпляр (такие ключевые слова экземпляра, как этот или супер) класса?

Да. Вместо использования этого или супер просто используйте имя интерфейса для доступа к нему.

MyInterface.str 
+0

Вопрос обновлен. – naaz

Смежные вопросы