在Java中,为什么我不能继承Interfaces?
如果情况是接口没有提供方法的实现,那么我们如何能够从Abstract Classes继承。
答案 0 :(得分:13)
简单地说,你不能从接口继承,因为接口只提供抽象,而不是功能。
以下评论中的注释(感谢@Mark Peters和@qqilihq):
您还可以查看Official Java Tutorials,这是Java知识的良好起点。
答案 1 :(得分:3)
这是因为抽象类和接口本质上是不同类型的对象。抽象类定义功能,而继承作为框架。
编辑:正如我在上面发布的那样,您可以继承任意数量的接口,但只能继承一个抽象类
答案 2 :(得分:0)
Java仅通过EXTENDS
关键字支持单继承。这个想法是你可以从同一个类的多个接口“继承”。
因此IMPLEMENTS
关键字用于“继承”接口。
一个IMPLEMENTS
接口可以访问接口中所有声明的类。
答案 3 :(得分:0)
事实上,你可以继承接口 - 但只是为了扩展他们的接口。
您可以创建abstract
个类来完成接口所需的部分或全部工作。
然后,您可以extend
您的abstract
课程来制作真正的课程。如果愿意,甚至可以覆盖抽象类的功能。
// close
interface Closeable {
public void close();
}
// open and close
interface Openable extends Closeable {
public void open();
}
// Simplistic implementation
abstract class AbstractCloseable implements Closeable {
@Override
public void close() {
System.out.println(this.getClass().getSimpleName() + "-close");
}
}
// Simplistic implementation
abstract class AbstractOpenable extends AbstractCloseable implements Openable {
boolean open = false;
@Override
public void open() {
System.out.println(this.getClass().getSimpleName() + "-open");
open = true;
}
@Override
public void close() {
super.close();
open = false;
}
}
class PortHole extends AbstractOpenable implements Openable {
public void clean() {
if (!open) {
System.out.println(this.getClass().getSimpleName() + "-clean");
} else {
System.out.println(this.getClass().getSimpleName() + "-fall out");
}
}
}
public void test() {
System.out.println("Hello");
PortHole p = new PortHole();
p.open();
p.clean();
p.close();
p.clean();
}
打印:
PortHole-open
PortHole-fall out
PortHole-close
PortHole-clean