Java中行为接口类型的引用变量

时间:2011-03-22 23:13:32

标签: java oop reference

我正在阅读Head First Design Patterns并对Java有一些了解。它首先封装了与您的类不同的东西,并将它们放在一个单独的接口中,而不是将这些功能放在子类中。他们给出的一个例子是一个抽象的鸭子类,可以根据鸭子嘎嘎叫或飞行。它们有一个quack和fly接口(QuackBehavior和FlyBehavior接口),然后在其他类中实现这些接口。

在这个例子中,他们有抽象的鸭子类,如下所示

public abstract class Duck {
   QuackBehavior quackBehavior;
   FlyBehavior flyBehavior;
.....
}

我想对我来说最新的是拥有一个接口类型的实例变量。我之前从未学过这些,但我认为它是有效的?我想我更熟悉一个具体类的实例变量。是否有关于这样的类/接口的实例变量的规则?感谢。

3 个答案:

答案 0 :(得分:2)

这是有效的,也是一种常见做法。

实例变量是什么并不重要。甚至优选在可能的情况下使用接口。例如,始终定义List类型而非ArrayList

的变量

否则你怎么能有不同的行为?现在,您可以将LowFlyBehaviourHighFlyBehaviour分配给字段,因此Duck的不同实例可以具有不同的飞行行为。如果该字段是这些具体类型中的任何一种,那么这是不可能的。

答案 1 :(得分:0)

如果您将字段声明为接口类型,则该字段将能够保存任何实现该接口的类。

这是一个正常的领域。

答案 2 :(得分:0)

是的,这是有效的。申请的唯一规则与申请任何其他类型相同;即你只能分配实现声明的接口的东西。您可能已经看过甚至使用过类似的语法而没有意识到它,例如:

List<String> list = new ArrayList<String>();
Serializable s = new Object();