我正在阅读《Head First Design Patterns》并对 Java 有一些了解。它首先封装与类不同的东西并将它们放入单独的接口(interface)中,而不是将这些功能放入子类中。他们给出的例子是一个抽象的 Duck 类,它可以根据鸭子的不同而嘎嘎叫或飞翔。它们有一个 quack 和 Fly 的接口(interface)(QuackBehavior 和 FlyBehavior 接口(interface)),然后在其他类中实现这些接口(interface)。
在示例中,他们具有如下抽象鸭子类
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
.....
}
我想对我来说新鲜的是拥有一个接口(interface)类型的实例变量。我以前从未学过,但我假设它是有效的?我想我更熟悉具体类的实例变量。对于像这样的类/接口(interface)的实例变量有什么规则吗?谢谢。
最佳答案
这是有效的,并且是一种常见的做法。
实例变量是什么并不重要。甚至最好尽可能使用接口(interface)。例如,始终定义 List
类型的变量,而不是 ArrayList
否则你怎么能有不同的行为呢?现在,您可以将 LowFlyBehaviour
和 HighFlyBehaviour
分配给该字段,因此 Duck
的不同实例可以具有不同的飞行行为。如果该字段是这些具体类型中的任何一种,则这是不可能的。
关于java - Java中行为接口(interface)类型的引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399016/