Java继承问题:有什么区别和原因?这给程序员带来了哪些优势和灵活性?

时间:2011-05-29 20:44:22

标签: java multithreading inheritance

如果我有一个名为CountDownClock的类并且它扩展了线程,而在另一个类中我声明了这个:

Thread clock = new CountDownClock();

与...不同:

CountDownClock clock = new CountDownClock();

如果是这样,有什么区别和利弊? 在两个声明的后一个中,我还可以调用父方法吗?

2 个答案:

答案 0 :(得分:4)

如果clock变量的使用仅依赖于Thread提供的方法,那么前一种方法更好,因为它对它所引用的特定对象做出的假设较少。

如果使用clock依赖于CountDownClock特定方法,那么显然后者是您唯一的选择。

经验法则基本上是在声明变量时始终选择最常用的类型。

同样的理由适用于首选

List<String> someList = new ArrayList<String>();

ArrayList<String> someList = new ArrayList<String>();
  

有什么区别和原因?

如果程序使用两种替代方案中的任何一种进行编译,那么从技术上讲,根本没有区别。两者之间的差异更多与维护有关。见下文。

  

这给程序员带来了哪些优势和灵活性?

如果clock仅用作常规Thread,那么选择第一个声明会使将来更换为不同的线程类更加简单。 (如果它被声明为Thread,那么您可以确定它将为Thread以外的任何其他CountDownClock类编译正常。)

相关问题:

答案 1 :(得分:0)

区别仅在于包含变量的类型。两个变量引用的内存将具有相同的结构。你总是可以将任何变量转换为另一个变量(请记住,当你存储专门的类的对象而不是父类的对象时,这是真的。)

优缺点取决于您的应用程序设计。当然更多的抽象更好,所以首选使用Thread而不是CountDownClock,但有时候这是不可能的,你必须使用更专业的类型(CountDownClock)。