Java наследование статической переменной

У меня есть статическая переменная в моем классе Base123

class Base123 {
    public static int statvar;
}

и у меня есть производный класс Inheritance111, который расширяет Base123

public class Inheritance111 extends Base123 {

    public static void main(String[] args) {
        System.out.println(Inheritance111.statvar);
        System.out.println(Base123.statvar);
        Base123.statvar=10;
        System.out.println(Inheritance111.statvar);
        System.out.println(Base123.statvar);
        System.out.println(statvar);
        Inheritance111.statvar=20;
        System.out.println(Inheritance111.statvar);
        System.out.println(Base123.statvar);
        System.out.println(statvar);
    }
}

Я получил вывод для приведенного выше кода как:

0 0 10 10 10 20 20 20

Для одного класса статическая переменная является общей для всех объектов класса. Но когда класс расширяется, является ли унаследованная переменная в подклассе той же самой переменной? Поскольку изменения, сделанные с использованием

Inheritance111.statvar=20;

изменяет значение Base123.statvar.


person Krishna    schedule 26.11.2018    source источник
comment
статические переменные не наследуются. не означает, что к нему нельзя получить доступ. ты пробовал так делать? какой результат вы получили?   -  person Stultuske    schedule 26.11.2018
comment
Статическая переменная является общей для всех объектов этого класса, поскольку она принадлежит информации о классе.   -  person ValarDohaeris    schedule 26.11.2018
comment
@Stultuske Если я дам System.out.println(statvar); Я вижу значение статической переменной внутри класса Derived.   -  person Krishna    schedule 26.11.2018
comment
@Stultuske, как бы ты тогда это назвал? sharing между занятиями?   -  person Eugene    schedule 26.11.2018
comment
@ Юджин, зачем мне давать ему имя? статические члены не наследуются. это не значит, что их нельзя использовать. однако это означает, что когда они переопределяются в подклассе, они не перезаписывают, а скрывают оригинал.   -  person Stultuske    schedule 26.11.2018
comment
@Stultuske Я понимаю, что если он переопределен в подклассе, статические члены не переопределяются, а скрываются. Но здесь я не переопределяю. У меня есть только одно объявление переменной в базовом классе. Если переменная не унаследована, как я могу ссылаться на нее, не используя имя класса? Как и в предыдущем комментарии, я могу распечатать его с помощью System.out.println(statvar); внутри основного метода подкласса.   -  person Krishna    schedule 26.11.2018
comment
вы можете ссылаться, потому что экземпляр подкласса по определению является экземпляром суперкласса. Все, что я говорю, это то, что со статическими членами нет наследования.   -  person Stultuske    schedule 26.11.2018
comment
@Eugene Из кода, который я пытаюсь, поскольку изменение в переменной, называемой «Inheritance111.statvar», отражает переменную «Base123.statvar», обе кажутся одинаковыми или переменная используется совместно классами. . Это все потому, что я не должен был объявлять переменную общедоступной в первую очередь?   -  person Krishna    schedule 26.11.2018


Ответы (1)


Да, это относится к той же переменной, что и суперкласс, даже если вы вызываете переменную из подкласса, например Inheritance111.statvar=20;.
Вы можете обратиться к этому JavaDoc статические поля

person Tarun    schedule 26.11.2018