原文: https://howtodoinjava.com/java9/java9-private-interface-methods/
从 Java 9 开始,您可以在接口中包含私有方法。 使用私有方法,现在也可以在接口中实现封装。
在此 Java 9 教程中,我们将详细了解接口私有方法。
Table of Contents
Interfaces till Java 7
Static and defaults methods since Java 8
Private methods since java 9
Java 9 Private Interface Method Example
Summary
Java 7 接口
在 Java 7 和所有早期版本中,接口非常简单。 它们只能包含公共抽象方法。 这些接口方法必须由选择实现接口的类实现。
public interface CustomInterface {
public abstract void method();
}
public class CustomClass implements CustomInterface {
@Override
public void method() {
System.out.println("Hello World");
}
public static void main(String[] args){
CustomInterface instance = new CustomClass();
instance.method();
}
}
Output:
Hello World
自 Java 8 以来的静态方法和默认方法
在 Java 8 中,除了公共抽象方法之外,您还可以使用公共静态方法和公共默认方法。
public interface CustomInterface {
public abstract void method1();
public default void method2() {
System.out.println("default method");
}
public static void method3() {
System.out.println("static method");
}
}
public class CustomClass implements CustomInterface {
@Override
public void method1() {
System.out.println("abstract method");
}
public static void main(String[] args){
CustomInterface instance = new CustomClass();
instance.method1();
instance.method2();
CustomInterface.method3();
}
}
Output:
abstract method
default method
static method
访问修饰符public
在以上所有接口方法声明中都是可选的。 我添加它们只是为了提高可读性。
自 Java 9 以来的私有方法
从 Java 9 开始,您将可以在接口中添加私有方法和私有静态方法。
这些私有方法将改善接口内部的代码可重用性。 举例来说,如果需要两个默认方法来共享代码,则可以使用私有接口方法来共享代码,但不必将该私有方法暴露给实现类。
在接口中使用私有方法有四个规则:
- 接口私有方法不能是抽象的。
- 私有方法只能在接口内部使用。
- 私有静态方法可以在其他静态和非静态接口方法中使用。
- 私有非静态方法不能在私有静态方法内部使用。
public interface CustomInterface {
public abstract void method1();
public default void method2() {
method4(); //private method inside default method
method5(); //static method inside other non-static method
System.out.println("default method");
}
public static void method3() {
method5(); //static method inside other static method
System.out.println("static method");
}
private void method4(){
System.out.println("private method");
}
private static void method5(){
System.out.println("private static method");
}
}
public class CustomClass implements CustomInterface {
@Override
public void method1() {
System.out.println("abstract method");
}
public static void main(String[] args){
CustomInterface instance = new CustomClass();
instance.method1();
instance.method2();
CustomInterface.method3();
}
}
Output:
abstract method
private method
private static method
default method
private static method
static method
Java 9 接口私有方法示例
让我们看一个演示,以了解接口私有方法的用法。
我正在创建具有两个函数的计算器类。 第一个函数将接受一些整数并将所有偶数相加。 第二个函数将接受一些整数并将所有奇数相加。
CustomCalculator.java
– 接口
import java.util.function.IntPredicate;
import java.util.stream.IntStream;
public interface CustomCalculator
{
default int addEvenNumbers(int... nums) {
return add(n -> n % 2 == 0, nums);
}
default int addOddNumbers(int... nums) {
return add(n -> n % 2 != 0, nums);
}
private int add(IntPredicate predicate, int... nums) {
return IntStream.of(nums)
.filter(predicate)
.sum();
}
}
Main.java
– 类
public class Main implements CustomCalculator {
public static void main(String[] args) {
CustomCalculator demo = new Main();
int sumOfEvens = demo.addEvenNumbers(1,2,3,4,5,6,7,8,9);
System.out.println(sumOfEvens);
int sumOfOdds = demo.addOddNumbers(1,2,3,4,5,6,7,8,9);
System.out.println(sumOfOdds);
}
}
Output:
20
25
总结
简而言之, java 9 私有接口方法可以是静态的也可以是实例的。 在这两种情况下,私有方法都不会被子接口或实现继承。 它们主要是为了提高代码仅在接口内的可重用性,从而改善封装。
让我们回顾一下 Java 9 中所有允许的方法类型。
方法类型 | 从何时起 |
---|---|
公共抽象 | Java 7 |
公共默认 | Java 8 |
公共静态 | Java 8 |
私有 | Java 9 |
私有静态 | Java 9 |
将您的问题放在评论部分中。
学习愉快!
参考: JEP 213