Переопределение переменной интерфейса?
Как я читал из различных книг и учебников Java, переменные, объявленные в интерфейсе, являются константами и не могут быть переопределены.
Я сделал простой код, чтобы проверить его
interface A_INTERFACE
{
int var=100;
}
class A_CLASS implements A_INTERFACE
{
int var=99;
//test
void printx()
{
System.out.println("var = " + var);
}
}
class hello
{
public static void main(String[] args)
{
new A_CLASS().printx();
}
}
и распечатывает
var = 99
Заменяется ли var? Я совершенно смущен. Спасибо за любые предложения!
Спасибо всем! Я новичок в этом интерфейсе. "Тень" - ключевое слово, чтобы понять это. Я просматриваю связанные материалы и понимаю это сейчас.
Ответы
Ответ 1
Он не переопределен, а затенен, с дополнительной путаницей, потому что константа в интерфейсе также статична.
Попробуйте следующее:
A_INTERFACE o = new A_CLASS();
System.out.println(o.var);
Вы должны получить предупреждение времени компиляции о доступе к статическому полю нестационарным способом.
И теперь это
A_CLASS o = new A_CLASS();
System.out.println(o.var);
System.out.println(A_INTERFACE.var); // bad name, btw since it is const
Ответ 2
Вы не переопределили переменную, вы затеняли ее новой переменной экземпляра, объявленной в более конкретной области. Это переменная, напечатанная в вашем методе printx
.
Ответ 3
Подпись по умолчанию для любой переменной в интерфейсе
public static final ...
Поэтому вы не можете переопределить его.
Ответ 4
Переменная, указанная в этом интерфейсе, не отображается классу, который ее реализовал.
Если вы объявляете переменную в статичной и конечной, то есть константе, ТОГДА она видна разработчикам.