如果一个类有同步方法,它的子类是否也有相同的同步方法,无论是简单地继承还是被子类覆盖?
具体来说,
旧版Vector
具有同步方法,Stack
是Vector
的子类。 Stack
也有同步方法吗?
旧版Hashtable
具有同步方法,Properties
是Hashtable
的子类。 Properties
是否也有同步方法?
我的问题的动机来自What are the replacements for legacy collections `Stack` and `Properties`?
感谢。
答案 0 :(得分:4)
如果一个类有同步方法,它的子类是否也有相同的同步方法,无论是简单地继承还是被子类覆盖?
超类中的synchronized
方法可以在子类中作为非synchronized
方法覆盖,反之亦然。
如果子类没有覆盖synchronized
方法但只是继承它,那么该方法将作为synchronized
方法继承。
我想知道是否需要找到同步替换 对堆栈和属性
Stack
和Properties
是线程安全的类,因为他们的大部分方法都是synchronized
(包括来自Vector
/ Hashtable
的继承方法)。尽管如此,仍然无法保护它们在多线程环境中不正确使用。
答案 1 :(得分:0)
子类从其超类继承所有成员(字段,方法和嵌套类)。构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数。
但是,子类不会继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则子类也可以使用这些方法
所以是的,同步方法由子类继承。您可以浏览javadoc了解更多详情。