我正在阅读Head First Design Pattern,并对Java有一些了解。它首先封装与您的类不同的东西,并将它们放在一个单独的接口中,而不是将这些功能放在子类中。他们给出的例子是一个抽象的duck类,可以根据鸭子叫或飞。它们有一个用于虚张声势的接口(QuackBehavior和FlyBehavior接口),然后在其他类中实现这些接口。
在该示例中,它们具有如下抽象的鸭类
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
.....
}我猜对我来说最新的是拥有一个接口类型的实例变量。我以前从来没有学过,但我假设它是有效的?我想我更熟悉的是一个具体类的实例变量。有没有类似这样的类/接口的实例变量的规则?谢谢。
发布于 2011-03-23 07:20:34
是的,它是有效的。应用的唯一规则与应用于任何其他类型的规则相同;即您只能分配实现已声明接口的内容。您可能以前在没有意识到的情况下看到过甚至使用过类似的语法,例如:
List<String> list = new ArrayList<String>();
Serializable s = new Object();发布于 2011-03-23 07:17:40
这是有效的,也是一种常见的做法。
实例变量是什么并不重要。甚至在可能的情况下,最好使用接口。例如,始终定义类型为List而不是ArrayList的变量
否则,你怎么能有不同的行为呢?现在,您可以将LowFlyBehaviour和HighFlyBehaviour都指定给该场,因此Duck的不同实例可以具有不同的飞行行为。如果该字段是这两种具体类型中的任意一种,那么这是不可能的。
发布于 2011-03-23 07:16:16
如果将字段声明为接口类型,则该字段将能够保存实现该接口的任何类。
这是一个普通的字段。
https://stackoverflow.com/questions/5399016
复制相似问题