如果我有一个名为CountDownClock的类并且它扩展了线程,而在另一个类中我声明了这个:
Thread clock = new CountDownClock();
与...不同:
CountDownClock clock = new CountDownClock();
如果是这样,有什么区别和利弊? 在两个声明的后一个中,我还可以调用父方法吗?
答案 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)。