Java 9 接口中的私有方法
原文:https://www . geesforgeks . org/private-methods-Java-9-interfaces/
从 Java 9 开始,您可以在接口中包含私有方法。在 Java 9 之前,这是不可能的。
【Java 7 之前的接口
在 Java SE 7 或更早的版本中,一个接口只能有两样东西,即常量变量和抽象方法。这些接口方法必须由选择实现接口的类来实现。
// Java 7 program to illustrate
// private methods in interfaces
public interface TempI {
public abstract void method(int n);
}
class Temp implements TempI {
@Override
public void method(int n)
{
if (n % 2 == 0)
System.out.println("geeksforgeeks");
else
System.out.println("GEEKSFORGEEKS");
}
public static void main(String[] args)
{
TempI in1 = new Temp();
TempI in2 = new Temp();
in1.method(4);
in2.method(3);
}
}
OUTPUT : geeksforgeeks
GEEKSFORGEEKS
Java 8 界面更改
Java 8 中引入了一些新的接口特性,即默认方法和静态方法特性。在 Java 8 中,一个接口只能有四种类型:
- 常量变量
- 抽象方法
- 默认方法
- 静态方法
例
// Java 8 program to illustrate
// static, default and abstract methods in interfaces
public interface TempI {
public abstract void div(int a, int b);
public default void
add(int a, int b)
{
System.out.print("Answer by Default method = ");
System.out.println(a + b);
}
public static void mul(int a, int b)
{
System.out.print("Answer by Static method = ");
System.out.println(a * b);
}
}
class Temp implements TempI {
@Override
public void div(int a, int b)
{
System.out.print("Answer by Abstract method = ");
System.out.println(a / b);
}
public static void main(String[] args)
{
TempI in = new Temp();
in.div(8, 2);
in.add(3, 1);
TempI.mul(4, 1);
}
}
OUTPUT : Answer by Abstract method = 4
Answer by Default method = 4
Answer by Static method = 4
Java 9 界面更改
Java 9 在接口中引入了私有方法和私有静态方法。在 Java 9 和更高版本中,一个接口可以有六种不同的东西:
- 常量变量
- 抽象方法
- 默认方法
- 静态方法
- 私有方法
-
Private Static methods
这些私有方法将提高接口内部代码的可重用性,并将提供仅向用户公开我们的预期方法实现的选择。这些方法只能在该接口内访问,不能从一个接口访问或继承到另一个接口或类。
```java // Java 9 program to illustrate // private methods in interfaces public interface TempI {
public abstract void mul(int a, int b);
public default void add(int a, int b) { // private method inside default method sub(a, b);
// static method inside other non-static method div(a, b); System.out.print("Answer by Default method = "); System.out.println(a + b); }
public static void mod(int a, int b) { div(a, b); // static method inside other static method System.out.print("Answer by Static method = "); System.out.println(a % b); }
private void sub(int a, int b) { System.out.print("Answer by Private method = "); System.out.println(a - b); }
private static void div(int a, int b) { System.out.print("Answer by Private static method = "); System.out.println(a / b); } }
class Temp implements TempI {
@Override public void mul(int a, int b) { System.out.print("Answer by Abstract method = "); System.out.println(a * b); }
public static void main(String[] args) { TempI in = new Temp(); in.mul(2, 3); in.add(6, 2); TempI.mod(5, 3); } } ```
```java OUTPUT : Answer by Abstract method = 6 // mul(2, 3) = 2*3 = 6 Answer by Private method = 4 // sub(6, 2) = 6-2 = 4 Answer by Private static method = 3 // div(6, 2) = 6/2 = 3 Answer by Default method = 8 // add(6, 2) = 6+2 = 8 Answer by Private static method = 1 // div(5, 3) = 5/3 = 1 Answer by Static method = 2 // mod(5, 3) = 5%3 = 2
```
在接口中使用私有方法的规则
- 私有接口方法不能是抽象的,并且不能同时有私有和抽象修饰符。
- 私有方法只能在接口内部以及其他静态和非静态接口方法中使用。
- 私有非静态方法不能在私有静态方法中使用。
- 我们应该使用私有修饰符来定义这些方法,并且不低于私有修饰符的可访问性。
所以,从上面可以看出,java 9 私有接口方法可以是静态的,也可以是实例的。在这两种情况下,子接口或实现都不会继承私有方法。它们主要是为了提高代码在接口内的可重用性,从而提高封装性。
版权属于:月萌API www.moonapi.com,转载请注明出处