接口的组成java
实现接口的升级ide
//定义一个接口 里面有两个抽象方法 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(); }
对上面出现的问题再进行进化,利用接口中默认方法spa
//在上面那个接口中作出改变 //定义一个接口 public interface MyInterface{ void show1(); void show2(); public default void show3(){//其余类都不会报错 public能够省略 sout("show3"); } }
在测试类中my.show3();同样能够使用,也能够在接口实现类中重写,会在控制台输出One show3code
//定义一个接口 里面有三个方法,一个抽象方法,一个默认方法,一个静态方法 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();//能够执行
定义的接口的默认方法
定义的接口的静态方法对象
//定义接口的一个实现类 public class InterImpl implements Inter{ //没有抽象方法不须要重写 } //定义测试类 //在主方法中,按照多态的方式建立对象并使用 Inter i= new InterImpl(); i.show1();//能够执行 i.show2();//能够执行 //接口中的静态方法只能被接口调用 Inter.method1();//能够执行 Inter.method2();//能够执行
//在接口中定义一个私有方法,把同样的部分提取出来 //下面面这个是非静态方法,只能调用默认方法(非静态),不能调用静态方法 private void show(){ //公共部分 }
//定义一个静态私有方法 private static void method(){ //公共部分 }
私有的静态方法不管是默认方法仍是静态方法均可以调用,私有非静态方法只能默认方法(非静态)调用继承