为什么 Java 允许您从部分实现接口的类创建对象,如果它是隐式抽象的?



我在HPrinter类上遇到编译器错误,说要包含未实现的方法或使我的类抽象,这显然是正确的,但我不明白的是为什么java允许创建该类的对象,我知道它不是明确抽象的,但它是隐式的。我知道我不调用未实现的方法,如果我这样做,我会得到一个错误,但首先它不应该让你创建一个 HPrinter 类的对象,不是吗?下面是一个示例:

public interface Printer {
void print();
void scan();
}
public class HPrinter implements Printer {  
public void print() {
System.out.println("print()");
}
}
public class TestInterface {
public static void main(String[] args) {
Printer p=new HPrinter();
p.print();
}
}

Java 接口可能有以下任何一种方法...

  • 抽象方法
  • 默认方法
  • 静态方法

(PS:仅适用于Java语言版本8及以上版本。

如果一个类实现一个接口,它必须为它所实现的接口的所有抽象方法提供实现。

默认方法不需要实现,它由实现接口的类自动继承,但是它可以被覆盖

静态方法不由实现接口的类继承,它只能通过使用接口的名称来调用

但是,重要的是要注意,如果抽象类实现接口,则不需要为其所有抽象方法提供实现,此外,抽象类无法实例化。

Java 类的协定合规性由编译器静态检查。虚拟机负责字节码加载、验证和运行。它不检查某个类是否实现了某个接口的所有方法。

相关内容

最新更新