2017-02-17 22 views
-4

Некоторые контексты: У меня есть два разных класса (Client и ClientAuth), которые расширяют один и тот же абстрактный класс NetworkingAbstract (я буду называть его NA). Этот последний класс имеет три различные защищенные статические переменные класса со следующими типами: Socket, InputStream и OutputStream.Java Inheritance, Два подкласса одного класса

Я создаю новый объект ClientAuth внутри класса Client. Объект ClientAuth вызывает метод, который инициализирует переменные класса NetworkingAbstract, InputStream и OutputStream. Затем, когда метод возвращается, когда я обращаюсь к этим переменным (внутри класса Client), они имеют те же значения, которые были приписаны им внутри объекта ClientAuth!

Это действительно соответствует моим потребностям, но я не понимаю, почему это происходит!

Не должны ли эти переменные класса (OutputStream и InputStream) быть независимыми между Client и ClientAuth, несмотря на то, что оба они расширяют один и тот же класс? Или это потому, что они оба расширяют один и тот же класс, они разделяют ценности?

Я надеюсь, что я сделал мой вопрос достаточно ясно ..

+3

всегда есть только один экземпляр статической переменной. это определение статики. – nhouser9

+0

Статические переменные распределяются между всеми экземплярами класса и его подклассов. В основном нет наследования или переопределения статических переменных, они не похожи на «переменные класса», с которыми вы можете использовать другие языки. – pvg

+2

Пожалуйста, не описывайте свои классы, покажите, что код сокращен до минимума, необходимого для передачи вашего вопроса (см. [Mcve]). –

ответ

2

Этого последним класс имеет три защищенные переменные статический класс со следующими типами: сокет, InputStream и OutputStream.

Статическая переменная - это та, которая связана с классом, а не с отдельными объектами этого класса.

Вам не нужно использовать статические переменные, если вы хотите, чтобы они были уникальными для каждого объекта.

0

Статические свойства классов разделяются между всеми его экземплярами. По этой причине свойства все называются свойствами класса.

Прочитано java-static-methods-variables-static.