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中的接口
为了解决上述的问题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为我们提供的新功能——在接口中定义私有方法,对我们有很大的帮助,这将减少重复代码,提高代码的重用性,同时将私有方法写在接口中,不让子类看到,有很好的安全性。
posted @ 2018-04-03 21:22  sw008  阅读(149)  评论(0编辑  收藏  举报