java - 我们如何在 Java 中使用抽象的、私有的、静态的、默认的接口方法?
问题描述
在使用 Java lambda 编码时,我阅读了 Java 接口中的默认方法。所以我试图更多地了解我们可以拥有的 Java 接口中不同类型的方法。更重要的是基于它们的可见性和有效调用。
解决方案
Java 接口目前支持抽象、静态、默认、私有方法。直到 JDK7 只有抽象方法,但在 Java8 中引入了静态和默认方法。Java9 引入了私有方法。这些方法类型之间的一些区别如下:
- 静态、默认、私有方法有主体,但抽象方法没有
- 抽象和默认方法被称为实例方法,因为它们可以由实现类调用,但私有静态方法只能从静态方法调用,静态方法使用接口名称调用。
- 除了抽象方法之外,所有其他方法类型都必须有一个主体。
- 接口方法默认是公共的,但也可以有私有访问。不允许受保护的访问。静态方法也可以是私有的。
让我在这里放一些代码以便更好地理解它:
public interface MyInterface{
void abstractMethod();
private void privateMethod() {
System.out.println("Hi, this is privateMethod");
}
private static void staticPrivateMethod() {
System.out.println("Hi, this is staticPrivateMethod");
}
static void staticMethod() {
//privateMethod(); // Non-static method cannot be referenced from a static contex
System.out.println("Hi, this is staticMethod");
staticPrivateMethod();
}
default void defaultMethod() {
System.out.println("Hi, this is defaultMethod");
}
default void defaultMethod(int i) {
System.out.println("Hi, this is defaultMethod with arg");
}
}
public class MyInterfaceImpl implements MyInterface{
public static void main(String[] args) {
MyInterface myInterface = new MyInterfaceImpl();
MyInterface.staticMethod();
// myInterface.staticMethod(); // Not allowed
myInterface.defaultMethod();
myInterface.defaultMethod(5);
// MyInterface.defaultMethod(); // Not allowed
}
@Override
public void abstractMethod() {}
@Override
public void defaultMethod() {
System.out.println("Hi, this is MyInterfaceImpl defaultMethod");
}
}
推荐阅读
- c++ - C++ 类:在没有构造函数重载的情况下初始化属性
- javascript - 禁用输入字段但不阻止用户选择文本
- android - 底部导航图标不显示原始颜色
- python - 将EEG文本文件读入python
- salesforce - Visualforce 页面中的命令按钮
- c++ - MiniDumpWriteDump() 进入命名管道,然后 ReadFile()
- google-api - 使用 gspread 或 gspread-formatting 批量检索工作表中所有单元格的“dataValidation”?
- javascript - 无法理解猫鼬虚拟中的“.this”
- java - 如何使用具有泛型和继承的方法?
- javascript - 使用 axios 渲染 ejs 时出现“无法读取数据属性错误”