首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中行为接口类型的引用变量

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

Stack Overflow用户
提问于 2011-03-23 07:13:32
回答 3查看 690关注 0票数 0

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

在该示例中,它们具有如下抽象的鸭类

代码语言:javascript
复制
public abstract class Duck {
   QuackBehavior quackBehavior;
   FlyBehavior flyBehavior;
.....
}

我猜对我来说最新的是拥有一个接口类型的实例变量。我以前从来没有学过,但我假设它是有效的?我想我更熟悉的是一个具体类的实例变量。有没有类似这样的类/接口的实例变量的规则?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-23 07:20:34

是的,它是有效的。应用的唯一规则与应用于任何其他类型的规则相同;即您只能分配实现已声明接口的内容。您可能以前在没有意识到的情况下看到过甚至使用过类似的语法,例如:

代码语言:javascript
复制
List<String> list = new ArrayList<String>();
Serializable s = new Object();
票数 0
EN

Stack Overflow用户

发布于 2011-03-23 07:17:40

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

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

否则,你怎么能有不同的行为呢?现在,您可以将LowFlyBehaviour和HighFlyBehaviour都指定给该场,因此Duck的不同实例可以具有不同的飞行行为。如果该字段是这两种具体类型中的任意一种,那么这是不可能的。

票数 2
EN

Stack Overflow用户

发布于 2011-03-23 07:16:16

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

这是一个普通的字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5399016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档