Как получить доступ к полю интерфейса (который по умолчанию является общедоступным, статическим и окончательным) с использованием экземпляра класса реализации (или 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;
}
}
Примечания
Я знаю, что не рекомендуется обращаться к статическим членам, используя экземпляр вместо его статического доступа (
Type.staticMemberNameOrSignature
).Как показано, статические методы интерфейса не наследуются, тогда как поля статического интерфейса наследуются.
Некоммерческие строки не генерируют ошибок времени компиляции.
комментируемые линии, которые пытаются присвоить значение переменной
result
являются те, порождающие ошибки времени компиляции (Добавленные линии)Я не с просьбой о том, как получить доступ к области интерфейса Статический.
уточняющий вопрос
Можно ли получить доступ к области интерфейсов, которые были скрыты от реализующего класса с помощью экземпляра (экземпляра ключевые слова, как this
или super
) класса?
'return MyInterface.str;' –
Тот факт, что это интерфейс, не имеет значения. –
@SotiriosDelimanolis Вопрос обновлен. – naaz