接口的組成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 show3
code
//定義一個接口 裏面有三個方法,一個抽象方法,一個默認方法,一個靜態方法 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(){ //公共部分 }
私有的靜態方法不管是默認方法仍是靜態方法均可以調用,私有非靜態方法只能默認方法(非靜態)調用
繼承