Переопределение переменной интерфейса?

Как я читал из различных книг и учебников 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

Переменная, указанная в этом интерфейсе, не отображается классу, который ее реализовал.

Если вы объявляете переменную в статичной и конечной, то есть константе, ТОГДА она видна разработчикам.