乐趣区

关于java:接口组成更新

接口组成更新概述

接口的组成

  • 常量
    public static final
  • 形象办法
    public abstract
  • 默认办法 (java 8)
  • 形象办法 (java 8)
  • 公有办法 (java 9)

接口中默认办法

实现接口的降级

// 定义一个接口 外面有两个形象办法
public interface MyInterface{void show1();
    void show2();}

// 定义接口的两个实现类
// 第一个
public class MyInterfaceImplOne implements MyInterface{
   // 重写形象办法 
   @Override
   public void show1(){sout("One show1");
   }
   @Override
   public void show2(){sout("One show2");
   }
}
// 第二个
public class MyInterfaceImplTwo implements MyInterface{
   // 重写形象办法 
   @Override
   public void show1(){sout("Two show1");
   }
   @Override
   public void show2(){sout("Two show2");
   }
}

// 定义测试类
// 在主办法中,依照多态的形式创建对象并应用
MyInterface my = new MyInterfaceImplOne();
my.show1();
my.show2();

如果要降级接口,在接口中定义新的形象办法,那接口的实现类就须要重写增加的这个办法,这样会很麻烦,于是做出如下扭转,定义一个新的接口 让这个接口继承咱们原本的接口,然而这样如果接口更新得比拟快,就会生成很多子接口就会很简单

// 定义一个新的接口 让这个接口继承咱们原本的接口
public interface MyInterfaceSon extends MyInterface{void show3();
}

对下面呈现的问题再进行进化,利用 接口中默认办法

  • 格局:public default 返回值类型 办法名(参数列表){}
  • 范例:public default void show3(){}
// 在下面那个接口中做出扭转
// 定义一个接口 
public interface MyInterface{void show1();
    void show2();
    
    public default void show3(){// 其余类都不会报错 public 能够省略
        sout("show3");
    }
}

在测试类中 my.show3(); 一样能够应用,也能够在接口实现类中重写,会在控制台输入 One show3


接口中静态方法

  • 格局:public static 返回值类型 办法名(参数列表){}
  • 范例:public static void show(){}
// 定义一个接口 外面有三个办法,一个形象办法,一个默认办法,一个静态方法
public interface Inter{void show();
    default void method(){sout("Inter 中的默认办法执行了");
    }
    public static void test(){//public 能够省略
        sout("Inter 中的静态方法执行了");
    }
}

// 定义接口的一个实现类
public class InterImpl implements Inter{
   // 重写形象办法 
   @Override
   public void show(){sout("show 办法执行了");
   }
}

// 定义测试类
// 在主办法中,依照多态的形式创建对象并应用
Inter i= new InterImpl();
i.show();// 能够执行
i.method();// 能够执行
i.test();// 报错
InterImpl.test();// 报错

// 接口中的静态方法只能被接口调用
Inter.test();// 能够执行 


接口中公有办法

  • 格局 1:private 返回值类型 办法名(参数列表){}
  • 范例:private void show(){}
  • 格局 2:private static 返回值类型 办法名(参数列表){}
  • 范例:private static void method(){}

定义的接口的 默认办法

定义的接口的 静态方法

// 定义接口的一个实现类
public class InterImpl implements Inter{// 没有形象办法不须要重写}

// 定义测试类
// 在主办法中,依照多态的形式创建对象并应用
Inter i= new InterImpl();
i.show1();// 能够执行
i.show2();// 能够执行
// 接口中的静态方法只能被接口调用
Inter.method1();// 能够执行 
Inter.method2();// 能够执行 

// 在接口中定义一个公有办法,把一样的局部提取进去
// 上面面这个是非静态方法,只能调用默认办法(非动态),不能调用静态方法
private void show(){// 公共局部}

// 定义一个动态公有办法
private static void method(){// 公共局部}


公有的静态方法无论是默认办法还是静态方法都能够调用 公有非静态方法只能默认办法(非动态)调用

退出移动版