Переопределение переменной интерфейса?
Как я читал из различных книг и учебников 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 переопределен? Я в полном замешательстве. Спасибо за любые предложения!
всем большое спасибо! Я довольно новичок в этом интерфейсе. "Тень" - ключевое слово, чтобы понять это. Я ищу связанный материалы и понять его сейчас.
4 ответов
Он не переопределен, но затенен, с дополнительной путаницей, потому что константа в интерфейсе также статична.
попробуйте это:
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
вы не переопределили переменную, вы shadowed он с новой переменной экземпляра, объявленной в более конкретной области. Это переменная, напечатанная в вашем printx
метод.
подпись по умолчанию для любой переменной в интерфейс
public static final ...
Итак, вы не можете переопределить его в любом случае.
переменная, объявленная в этом интерфейсе, не видна классу, который ее реализовал.
Если вы объявляете переменную в статическом и окончательном, то есть константе, то она видна исполнителям.