接口新特性

打印 上一主题 下一主题

主题 563|帖子 563|积分 1689

接口组成更新
接口的组成:常量,抽象方法

  • Java8之前


  • 常量:public static final
  • 抽象方法:public abstract

  • 默认方法(Java8)
  • 静态方法(Java8)
  • 私有方法(Java9)
接口中默认方法(Java8)
接口中默认方法的格式:

  • 格式:public default 返回值类型 方法名(参数列表){}

  • 定义一个接口,里面有两个抽象方法,以及一个默认方法:
  1. public interface MyInterface {
  2.     void show1();
  3.     void show2();
  4.    
  5.     //默认方法,有方法体
  6.     //public关键字可以省略
  7.     public default void show3(){
  8.         System.out.println("MyInterface show3");
  9.     }
  10. }
复制代码

  • 定义接口的实现类,实现接口中的抽象方法:
  1. public class MyInterfaceImpl1 implements MyInterface {
  2.     @Override
  3.     public void show1() {
  4.         System.out.println("1.show1");
  5.     }
  6.     @Override
  7.     public void show2() {
  8.         System.out.println("1.show2");
  9.     }
  10. }
复制代码

  • 定义测试类:
  1. public class MyInterfaceDemo {
  2.     public static void main(String[] args) {
  3.         //按照多态的方式创建对象并使用
  4.         MyInterface my = new MyInterfaceImpl1();
  5.         my.show1();
  6.         my.show2();
  7.         my.show3();
  8.     }
  9. }
复制代码

  • 运行结果:
  1. 1.show1
  2. 1.show2
  3. MyInterface show3
复制代码

  • 接口中的show3方法也能够在接口的实现类中重写:
  1. public class MyInterfaceImpl1 implements MyInterface {
  2.     @Override
  3.     public void show1() {
  4.         System.out.println("1.show1");
  5.     }
  6.     @Override
  7.     public void show2() {
  8.         System.out.println("1.show2");
  9.     }
  10.     //重写接口中的默认方法show3
  11.     @Override
  12.     public void show3() {
  13.         System.out.println("1.show3");
  14.     }
  15. }
复制代码

  • 运行测试类:
  1. 1.show1
  2. 1.show2
  3. 1.show3
复制代码
接口中默认方法的注意事项:

  • 接口中的默认方法不是抽象方法,不强制重写。但可以重写,重写时去掉关键字default
  • 接口中的默认方法,public关键字可以省略,但default关键字不能省略
接口中静态方法(Java8)
接口中静态方法的格式:

  • 格式:public static 返回值类型 方法名(参数列表){}

  • 定义一个接口,里面有抽象方法,默认方法和静态方法:
  1. public interface Inter {
  2.     //抽象方法
  3.     void show1();
  4.     //默认方法
  5.     default void show2(){
  6.         System.out.println("Inter show2");
  7.     }
  8.     //静态方法,public关键字可以省略,static关键字不能省略
  9.     public static void show3(){
  10.         System.out.println("Inter show3");
  11.     }
  12. }
复制代码

  • 定义一个接口的实现类,并实现接口中的抽象方法:
  1. public class InterImpl implements Inter{
  2.     @Override
  3.     public void show1() {
  4.         System.out.println("InterImpl show1");
  5.     }
  6. }
复制代码

  • 定义测试类
  1. public class InterDemo {
  2.     public static void main(String[] args) {
  3.         //多态的方式创建对象
  4.         Inter id = new InterImpl();
  5.         id.show1();
  6.         id.show2();
  7.         //接口中的静态方法,只能被接口调用
  8.         Inter.show3();
  9.     }
  10. }
复制代码

  • 运行结果:
  1. InterImpl show1
  2. Inter show2
  3. Inter show3
复制代码
接口中静态方法的注意事项:

  • 接口中静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
  • 接口中静态方法的public关键字可以省略,static关键字不能省略
接口中私有方法(Java9)
接口中私有方法的格式:

  • 格式1:private 返回值类型 方法名(参数列表){}
  • 格式2:private static 返回值类型 方法名(参数列表){}

  • 定义一个接口,里面有抽象方法,默认方法和静态方法:
  1. public interface Interf {
  2.     //抽象方法
  3.     void show1();
  4.     //默认方法
  5.     default void show2(){
  6.         System.out.println("默认方法开始");
  7.         //默认方法可以调用非静态私有方法,也可以调用静态私有方法
  8.         show4();
  9.         show5();
  10.         System.out.println("默认方法结束");
  11.     }
  12.     //静态方法
  13.     static void show3(){
  14.         System.out.println("静态方法开始");
  15.         //静态方法只能调用静态私有方法
  16.         show5();
  17.         System.out.println("静态方法结束");
  18.     }
  19.     //私有方法1,非静态私有方法
  20.     private void show4(){
  21.         System.out.println("私有方法1");
  22.     }
  23.     //私有方法2,静态私有方法
  24.     private static void show5(){
  25.         System.out.println("私有方法2");
  26.     }
  27. }
复制代码

  • 定义一个接口的实现类,并实现接口中的抽象方法:
  1. public class InterfImpl implements Interf{
  2.     @Override
  3.     public void show1() {
  4.         System.out.println("InterfImpl show1");
  5.     }
  6. }
复制代码

  • 定义测试类:
  1. public class InterfDemo {
  2.     public static void main(String[] args) {
  3.         //多态方式创建对象
  4.         Interf i = new InterfImpl();
  5.         i.show1();
  6.         System.out.println("-------------");
  7.         i.show2();
  8.         System.out.println("-------------");
  9.         //接口名调用静态方法
  10.         Interf.show3();
  11.     }
  12. }
复制代码

  • 运行结果:
  1. InterfImpl show1
  2. -------------
  3. 默认方法开始
  4. 私有方法1
  5. 私有方法2
  6. 默认方法结束
  7. -------------
  8. 静态方法开始
  9. 私有方法2
  10. 静态方法结束
复制代码
接口中私有方法的注意事项:

  • 接口中的默认方法,可以调用非静态私有方法,也可以调用静态私有方法
  • 静态方法只能调用私有的静态方法

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表