java 接口演变
原文 https://blog.csdn.net/tracydragonlxy/article/details/78082600
Java7中的接口
Java8中的接口
Java9中的接口
在接口中定义私有方法
为什么我们需要在接口中使用私有方法
Java7中的接口
静态常量(作用域public final static,可以不写)
抽象方法(作用域public,可以不写)
我们不能在接口中提供方法实现。如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类。
例如:public interface JavaSeven{
String TYPE_NAME = "java seven interface";
int TYPE_AGE = 20;
String TYPE_DES = "java seven interface description";
void method01();
void method02(String arg);
void method03(String arg1,int arg2);
String method04();
}
这里我们定义了一些常量和公共抽象方法。如果我们想在这里提供这些方法的实现,如何解决这个问题呢?我们应该使用抽象类来解决Java SE 7中的上述情况。
Java8中的接口在Java SE 8 Release中Java接口引入了一些新功能——默认方法和静态方法。我们可以在Java SE 8的接口中编写方法实现,仅仅需要使用“default”关键字来定义它们。
静态常量
抽象方法(作用域public,可以不写)
默认方法(default)
静态方法(static)
例如:
public interface JavaEight{
String TYPE_NAME = "java seven interface";
int TYPE_AGE = 20;
String TYPE_DES = "java seven interface description";
default void method01(String msg){
//TODO
}
default void method02(){
//TODO
}
// Any other abstract methods
void method03();
void method04(String arg);
...
String method05();
}
这里我们为所有方法提供了实现。如果我们观察上面的代码,我们觉得有些代码冗余。如果要将冗余代码提取为常用方法,那应该使用公共方法。但是,如果API开发人员不想向客户端公开任何其他方法。我们如何解决这个问题?我们应该使用抽象类来解决Java SE 8中的上述情况。
为了解决上述的问题Java9提供了新的功能——在接口中使用private私有方法。我们可以使用’private’访问修饰符在接口中编写私有方法。
静态常量
抽象方法
默认方法
静态方法
私有方法
私有静态方法
例如:
public interface JavaNine{
String TYPE_NAME = "java seven interface";
int TYPE_AGE = 20;
String TYPE_DES = "java seven interface description";
default void method01(){
//TODO
}
default void method02(String message){
//TODO
}
private void method(){
//TODO
}
// Any other abstract methods
void method03();
void method04(String arg);
...
String method05();
}
在这里,我们将冗余代码提取到通用的私有方法中,以便我们的API客户端无法看到它们。
在接口中定义私有方法
在Interface中编写私有方法时,我们应该遵循以下规则:
我们应该使用私有修饰符(private)来定义这些方法。
我们不能同时使用私有修饰符(private)和abstract来定义这些方法。
“私有”方法意味着完全实现的方法,因为子类不能继承并覆盖此方法。
“抽象”方法意味着无实现方法。这里子类应该继承并覆盖此方法。
私有方法必须包含方法体,必须是具体方法。
这些接口私有方法仅在该接口内是有用的或可访问的。我们无法从接口访问或继承私有方法到另一个接口或类。
**总结:**Java9为我们提供的新功能——在接口中定义私有方法,对我们有很大的帮助,这将减少重复代码,提高代码的重用性,同时将私有方法写在接口中,不让子类看到,有很好的安全性。