在 Java 中,为什么我不能从接口继承?
如果情况是接口不提供方法的实现,那么我们如何能够从抽象类继承。
简单地说,你不能从接口继承,因为接口只提供抽象,不提供功能。
以下评论的注释(感谢@Mark Peters 和@qqilihq):
您也可以查看官方 Java 教程,这是一个很好的 Java 知识起点。
这是因为抽象类和接口本质上是不同类型的对象。抽象类定义功能,而继承充当框架。
编辑:正如我在上面发布的那样,您可以继承任意数量的接口,但只能继承一个抽象类
EXTENDS
Java 仅支持通过关键字进行单继承。这个想法是您可以从同一个类中的多个接口“继承”。
因此,该IMPLEMENTS
关键字用于“继承”一个接口。
IMPLEMENTS
一个接口可以访问接口中所有声明的类。
事实上,您可以从接口继承 - 但只能扩展它们的接口。
您可以创建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