继承和重写同步方法

时间:2017-11-21 18:47:03

标签: java multithreading inheritance collections thread-safety

如果一个类有同步方法,它的子类是否也有相同的同步方法,无论是简单地继承还是被子类覆盖?

具体来说,

  • 旧版Vector具有同步方法,StackVector的子类。 Stack也有同步方法吗?

  • 旧版Hashtable具有同步方法,PropertiesHashtable的子类。 Properties是否也有同步方法?

我的问题的动机来自What are the replacements for legacy collections `Stack` and `Properties`?

感谢。

2 个答案:

答案 0 :(得分:4)

  

如果一个类有同步方法,它的子类是否也有相同的同步方法,无论是简单地继承还是被子类覆盖?

超类中的synchronized方法可以在子类中作为非synchronized方法覆盖,反之亦然。

如果子类没有覆盖synchronized方法但只是继承它,那么该方法将作为synchronized方法继承。

  

我想知道是否需要找到同步替换   对堆栈和属性

StackProperties是线程安全的类,因为他们的大部分方法都是synchronized(包括来自Vector / Hashtable的继承方法)。尽管如此,仍然无法保护它们在多线程环境中不正确使用。

答案 1 :(得分:0)

子类从其超类继承所有成员(字段,方法和嵌套类)。构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数。

但是,子类不会继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则子类也可以使用这些方法

所以是的,同步方法由子类继承。您可以浏览javadoc了解更多详情。