java - Java中行为接口(interface)类型的引用变量

标签 java oop reference

我正在阅读《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

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

关于java - Java中行为接口(interface)类型的引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399016/

相关文章:

java - log4j 与 System.out.println - 记录器的优势?

Java 类/继承结构

C# 模板和特殊构造函数

java - DTO 转换层

java - 从 HTTP post 获取 JSON 值到 TextView

Java如何在Apache POI上进行搜索和替换时避免覆盖模板文件

Java:JPanel 矩形问题?

android - javadoc中的引用资源

Xcode 4.2 — 将派生文件添加到项目

c++ - C++ 中的引用到引用是什么意思? (不是右值引用)