Наследование и переопределение синхронизированных методов

Если у класса есть синхронизированные методы, есть ли у его подкласса такие же синхронизированные методы, просто унаследованные или переопределенные подклассом?

Конкретно,

  • устаревший Vector имеет синхронизированные методы, а Stack является подклассом Vector. Есть ли у Stack синхронизированные методы?

  • устаревший Hashtable имеет синхронизированные методы, а Properties является подклассом Hashtable. Есть ли у Properties синхронизированные методы?

Мотивы моих вопросов взяты из Каковы замены для устаревших коллекции `Стек` и `Свойства`?

Спасибо.


person Community    schedule 21.11.2017    source источник
comment
Почему свойство synchronized метода исчезает только потому, что оно унаследовано?   -  person Kayaman    schedule 21.11.2017
comment
Кто-нибудь хочет ответить на мои вопросы о конкретных коллекциях Stack и Properties?   -  person    schedule 21.11.2017
comment
@ Бен, нет смысла отвечать на вопрос о конкретных классах коллекций. Один и тот же ответ для всех классов.   -  person Andy Turner    schedule 21.11.2017
comment
@Andy Энди Я хочу сказать, нужно ли нам искать синхронизированные замены для Stack и Properties. См. здесь stackoverflow.com/questions/1386275/   -  person    schedule 21.11.2017
comment
@Ben Как связаны ваш первый и второй вопрос? Если вы хотели спросить, наследуют ли Stack и Properties методы synchronized, ответ положительный. Если вы хотели спросить, есть ли в Java альтернативный потокобезопасный класс, такой как Stack, то это кажется несвязанным вопросом по сравнению с вашим первым вопросом.   -  person CKing    schedule 21.11.2017
comment
@CKing этот несвязанный вопрос - моя мотивация. Я обновил свой пост с ним.   -  person    schedule 21.11.2017
comment
@Ben Первые два вопроса : устаревший вектор имеет синхронизированные методы, а стек является подклассом вектора. Есть ли у Stack также синхронизированные методы? и устаревшая Hashtable имеет синхронизированные методы, а Properties является подклассом Hashtable. Имеются ли в свойствах также синхронизированные методы? был дан ответ в моем сообщении. На третий вопрос Мотивы моих вопросов относятся к тому, чем можно заменить устаревшие коллекции Stack и Properties?, на который вы ответили в вопросе, на который вы ссылаетесь. На какую часть вашего вопроса еще нет ответа? Пожалуйста, объясните понятно!   -  person CKing    schedule 22.11.2017


Ответы (2)


Если у класса есть синхронизированные методы, есть ли у его подкласса такие же синхронизированные методы, просто унаследованные или переопределенные подклассом?

Метод synchronized из суперкласса может быть переопределен в подклассе как метод, отличный от synchronized, и наоборот.

Если подкласс не переопределяет метод synchronized, а просто наследует его, метод будет унаследован как есть как метод synchronized.

Мне было интересно, нужно ли нам найти синхронизированные замены для стека и свойств

Stack и Properties являются потокобезопасными классами в том смысле, что большинство их методов являются synchronized (включая методы, унаследованные от Vector/Hashtable). Хотя это все равно не защищает их от неправильного использования в многопоточном контексте.

person CKing    schedule 21.11.2017

Подкласс наследует все члены (поля, методы и вложенные классы) от своего суперкласса. Конструкторы не являются членами, поэтому они не наследуются подклассами, но конструктор суперкласса может быть вызван из подкласса.

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

Так что да, синхронизированные методы наследуются подклассом. Дополнительную информацию можно найти в javadoc.

person codingenious    schedule 21.11.2017
comment
Я понятия не имею, какое отношение первые 3/4 этого ответа имеют к ответу на вопрос. - person nickb; 21.11.2017
comment
gee.cs.oswego.edu/dl/cpj/mechanics.html Говорит синхронизировано не наследуется. - person Veneet Reddy; 21.11.2017
comment
Пытаюсь объяснить наследование во всем. - person codingenious; 21.11.2017
comment
@VeneetReddy говорит, что модификатор synchronized не наследуется автоматически, когда подклассы переопределяют методы суперкласса, например, если вы переопределяете метод, но опускаете synchronized, переопределенный метод не синхронизируется. - person Andy Turner; 21.11.2017