我一直在读一本关于Java的书(Sams自己教Java 21天,第6版),我有一个问题。
书上说,
接口不能是实例化的:新只能创建非抽象类的实例。
然后,它继续,并说了一个段落左右,稍后,您可以声明一个变量为接口类型的例如。
Iterator loop = new Iterator();这不是在我们使用new时实例化接口吗?
发布于 2014-01-20 18:33:58
第二项声明是错误的:
然后,它继续,并在后面写了一段左右,“您可以声明一个变量为接口类型为例如.
Iterator loop = new Iterator();"。
您确实可以声明变量Iterator loop;,可以使用返回Iterator的方法、实现Iterator的类的构造函数或匿名内部类对其进行初始化,但是不能直接安装Iterator。
编辑:
我在网上找到这本书。但是第五次告别。以下是引号:
请记住,几乎所有您可以使用类的地方,都可以使用接口。例如,您可以声明一个变量为接口类型: Iterator循环= new ()--当一个变量声明为接口类型时,它仅仅意味着对象已经实现了该接口。在这种情况下,因为Iterator包含一个类型为Iterator的对象,因此假设您可以在该对象上调用所有三个Iterator方法: hasNext()、next()和remove()。
太棒了!有第六版的书包含了如此愚蠢的错误!难以置信..。
发布于 2014-01-20 18:33:03
无法创建接口实例。本书所指的可能是一个实现给定接口的匿名内部类。例如,可以创建一个Runnable,如下所示:
Runnable instance = new Runnable() {
@Override
public void run() {
...
}
};对于Iterator接口,您必须实现在其中定义的所有3种方法:next()、hasNext()和remove()。
发布于 2014-03-24 15:35:30
如果有两个类:“循环”和“矩形”,它们实现了接口“区域”,并定义了它们自己实现的方法getParams()和calculateArea(),
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();
}这个代码会正常工作的。注意,接口对象区域是创建的,但不是直接实例化的。它后来被赋值为实现它的类的对象。
https://stackoverflow.com/questions/21241482
复制相似问题