首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口和实例化

接口和实例化
EN

Stack Overflow用户
提问于 2014-01-20 18:29:49
回答 3查看 186关注 0票数 4

我一直在读一本关于Java的书(Sams自己教Java 21天,第6版),我有一个问题。

书上说,

接口不能是实例化的只能创建非抽象类的实例。

然后,它继续,并说了一个段落左右,稍后,您可以声明一个变量为接口类型的例如。

代码语言:javascript
复制
Iterator loop = new Iterator();

这不是在我们使用new时实例化接口吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-20 18:33:58

第二项声明是错误的:

然后,它继续,并在后面写了一段左右,“您可以声明一个变量为接口类型为例如. Iterator loop = new Iterator();"

您确实可以声明变量Iterator loop;,可以使用返回Iterator的方法、实现Iterator的类的构造函数或匿名内部类对其进行初始化,但是不能直接安装Iterator

编辑:

我在网上找到这本书。但是第五次告别。以下是引号:

请记住,几乎所有您可以使用类的地方,都可以使用接口。例如,您可以声明一个变量为接口类型: Iterator循环= new ()--当一个变量声明为接口类型时,它仅仅意味着对象已经实现了该接口。在这种情况下,因为Iterator包含一个类型为Iterator的对象,因此假设您可以在该对象上调用所有三个Iterator方法: hasNext()、next()和remove()。

太棒了!有第六版的书包含了如此愚蠢的错误!难以置信..。

票数 5
EN

Stack Overflow用户

发布于 2014-01-20 18:33:03

无法创建接口实例。本书所指的可能是一个实现给定接口的匿名内部类。例如,可以创建一个Runnable,如下所示:

代码语言:javascript
复制
Runnable instance = new Runnable() {
   @Override
   public void run() {
      ...
   }
};

对于Iterator接口,您必须实现在其中定义的所有3种方法:next()hasNext()remove()

票数 4
EN

Stack Overflow用户

发布于 2014-03-24 15:35:30

如果有两个类:“循环”和“矩形”,它们实现了接口“区域”,并定义了它们自己实现的方法getParams()和calculateArea(),

代码语言:javascript
复制
public static void main(String[] args) {
    Area area; //no direct instatiation
    Rectangle rect = new Rectangle();
    Circle circ = new Circle();
    area = rect;//assign as another object; indirect instantiation
    area.getParams();
    area.calculateArea();
    area = circ;
    area.getParams();
    area.calculateArea();
}

这个代码会正常工作的。注意,接口对象区域是创建的,但不是直接实例化的。它后来被赋值为实现它的类的对象。

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

https://stackoverflow.com/questions/21241482

复制
相关文章

相似问题

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