第24天学习Java的笔记-接口Interface
生活随笔
收集整理的這篇文章主要介紹了
第24天学习Java的笔记-接口Interface
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
接口
1.接口概述與生活舉例
2.接口的定義基本格式、接口的抽象方法定義及使用
-
接口使用步驟:
-
1.接口不能直接使用,必須有一個“實現類”來“實現”該接口。
-
格式:
-
public class 實現類名稱 implements 接口名稱 {
-
//。。。
-
}
-
2.接口的實現類必須覆蓋重寫(實現)接口中所有的抽象方法。
-
實現:去掉abstract關鍵字,加上方法體大括號。
-
3.創建實現類的對象,進行使用。
-
注意事項:如果實現類并沒有覆蓋重寫接口中所有的抽象方法,那么這個實現類自己就必須是抽象類。
例子:
2.1.定義的時候直接用上下鍵選擇接口。
2.2.定義一個普通的類來實現接口,一般類命名為接口名+Imp。會自動生成覆蓋重寫接口中所有抽象方法。
package Demo2401;public class MyInterfaceAbstractImpl implements MyInterfaceAbstract{@Overridepublic void methodAbs1() {System.out.println("這是第一個方法");}@Overridepublic void methodAbs2() {System.out.println("這是第二個方法");}@Overridepublic void methodAbs3() {System.out.println("這是第三個方法");}@Overridepublic void methodAbs4() {System.out.println("這是第四個方法");} }2.3.在main方法中實現類,調用其中方法。
package Demo2401;/* * 接口就是多個類的公共規范。 * 接口是一種引用數據類型,最重要的內容就是其中的:抽象方法。 * 定義接口的格式:(接口名稱是大駝峰) * public interface 接口名稱 { * //接口名稱 * } * * 備注:換成了關鍵字interface之后,編譯生成的字節碼文件仍然是.java-->.class。 * * 如果是Java7,那么接口可以包含的內容有: * 1.常量 * 2.抽象方法 * * 如果是Java8,還可以額外包含有: * 3.默認方法 * 4.靜態方法 * * 如果是Java9,還可以額外包含有: * 5.私有方法 * * 接口使用步驟: * 1.接口不能直接使用,必須有一個“實現類”來“實現”該接口。 * 格式: * public class 實現類名稱 implements 接口名稱 { * //。。。 * } * 2.接口的實現類必須覆蓋重寫(實現)接口中所有的抽象方法。 * 實現:去掉abstract關鍵字,加上方法體大括號。 * 3.創建實現類的對象,進行使用。 * * 注意事項:如果實現類并沒有覆蓋重寫接口中所有的抽象方法,那么這個實現類自己就必須是抽象類。 * */public class Demo01Interface {public static void main(String[] args) {MyInterfaceAbstractImpl myInterfaceAbstract = new MyInterfaceAbstractImpl();myInterfaceAbstract.methodAbs1();myInterfaceAbstract.methodAbs2();myInterfaceAbstract.methodAbs3();myInterfaceAbstract.methodAbs4();} }3.接口的默認方法的定義、使用
本來接口中只有methodAbs,在接口A和B中都使用了。但當接口中加入methodAbs2時,A和B要重新覆蓋重寫methodAbs2,但是在實際生產中是不現實的,因此把method寫成默認方法。同時,在實現接口的類中可以重寫默認方法。
3.1 接口:
package Demo2402;/* * 從Java8開始,接口里允許定義默認方法。 * 格式: * public default 返回值類型 方法名稱(參數列表) { * 方法體 * } * 備注:接口當中的默認方法,可以解決接口升級的問題。 * */public interface MyInterfaceDefault {//這是抽象方法public abstract void methodAbs();//新添加了抽象方法//public abstract void methodAbs2();//新添加的方法改為默認方法就行public default void methodAbs2(){System.out.println("這是新添加的默認方法");} }3.2 接口的實現類A:
package Demo2402;public class MyInterfaceDefaultA implements MyInterfaceDefault{@Overridepublic void methodAbs() {System.out.println("實現方法A");} }3.3 接口的實現類B:
package Demo2402;public class MyInterfaceDefaultB implements MyInterfaceDefault {@Overridepublic void methodAbs() {System.out.println("實現方法B");}//可對默認方法進行重寫 alt+insert@Overridepublic void methodAbs2() {System.out.println("對默認方法重寫");} }3.4 main方法:
package Demo2402;/* * 1.接口的默認方法,可以通過接口實現類對象,直接調用。 * 2.接口的默認方法,也可以通過接口實現類進行覆蓋重寫。 * */public class Demo02Interface {public static void main(String[] args) {MyInterfaceDefaultA myInterfaceDefaultA = new MyInterfaceDefaultA();myInterfaceDefaultA.methodAbs();myInterfaceDefaultA.methodAbs2();MyInterfaceDefaultB myInterfaceDefaultB = new MyInterfaceDefaultB();myInterfaceDefaultB.methodAbs();myInterfaceDefaultB.methodAbs2();} } /* * 實現方法A 這是新添加的默認方法 實現方法B 這是新添加的默認方法 * * 實現方法A 這是新添加的默認方法 實現方法B 對默認方法重寫 * */4.接口的靜態方法定義、使用。
靜態方法與對象無關,與類有關。在接口中,沒必要創建實現接口類的對象,直接用接口調用靜態方法即可。
4.1 接口:
package Demo2403;/* * 從Java 8開始,接口當中允許定義靜態方法。 * 靜態:比如說學生小明用方法A,學生小紅也用方法A,那么方法與小明或者小紅無關,與學生有關。 *類.靜態方法();不是對象.靜態方法(); * 格式: * public static 返回值類型 方法名稱(參數列表){ * 方法體 * } * 提示:就是將abstract或者default換成static即可,帶上方法體。 * */public interface MyInterfaceStatic {public static void methodStatic(){System.out.println("這是靜態方法");} }4.2 多余的實現接口的類:
package Demo2403;public class MyInterfaceStaticImpl implements MyInterfaceStatic{}4.3 main方法:
package Demo2403;/** 注意:不能通過接口實現類的對象來調用接口當中的靜態方法,* 所以創建MyInterfaceStaticImpl是一個錯誤** 正確寫法:通過接口名稱,直接調用其中的靜態方法。* 格式:* 接口名稱.靜態方法名稱(參數)。* */public class Demo03Interface {public static void main(String[] args) {//創建了實現類的對象//MyInterfaceStaticImpl m = new MyInterfaceStaticImpl();//錯誤寫法//m.methodStatic();//直接通過接口名稱調用靜態方法MyInterfaceStatic.methodStatic();//這是靜態方法} }5.接口的私有方法定義和使用
兩個方法之間相同的太多了,就需要抽取一把。
5.1 普通私有方法:
package Demo2404; //因為我是java8,所以這個私有方法并不能正常使用 /* * 問題描述: * 我們需要抽取一個共有方法,用來解決兩個默認方法之間重復代碼的問題。 * 但是這個共有方法不應該讓實現類使用,應該是私有化的。 * * 解決方案: * 從Java9開始,接口當中允許定義私有方法。 * 1.普通私有方法,解決多個默認方法之間重復代碼問題 * 格式: * private 返回值類型 方法名稱(參數列表) { * 方法體 * } * 2.靜態私有方法,解決多個靜態方法之間重復代碼問題 * 格式: * private static 返回值類型 方法名稱(){ * 方法體 * } * */public interface MyInterfacePrivateA {public default void methodDefault1(){System.out.println("這是一個默認方法1");//common();}public default void methodDefault2(){System.out.println("這是一個默認方法2");//common();}// private void common(){ // System.out.println("aaa"); // System.out.println("bbb"); // System.out.println("ccc"); // } }5.2 靜態私有方法:
package Demo2404; //靜態私有方法 /* * 問題描述: * 我們需要抽取一個共有方法,用來解決兩個默認方法之間重復代碼的問題。 * 但是這個共有方法不應該讓實現類使用,應該是私有化的。 * * 解決方案: * 從Java9開始,接口當中允許定義私有方法。 * 1.普通私有方法,解決多個默認方法之間重復代碼問題 * 格式: * private 返回值類型 方法名稱(參數列表) { * 方法體 * } * 2.靜態私有方法,解決多個靜態方法之間重復代碼問題 * 格式: * private static 返回值類型 方法名稱(){ * 方法體 * } * */public interface MyInterfacePrivateB {public static void methodDefault1(){System.out.println("這是一個默認方法1");//common();}public static void methodDefault2(){System.out.println("這是一個默認方法2");//common();}// private static void common(){ // System.out.println("aaa"); // System.out.println("bbb"); // System.out.println("ccc"); // } }因為兩個前面的方法中重復的部分太多了,所以抽取到common方法中,如果將common也設置為public的話,那在實現接口類中,一定要重寫的,但實質上并不想讓其重寫,所以將其設置為private類型,只能供本接口中那兩個方法使用。
6.接口的常量定義和使用
package Demo2405;/* * 接口當中也可以定義“成員變量”,但是必須使用public static final三個關鍵字進行修飾。 * 從效果上看,這其實就是接口的【常量】 * 格式: * public static final 數據類型 常量名稱 = 數據值; * * 注意: * public:大家共有的 * static:可以通過接口名調用 * final:一旦使用final關鍵字進行修飾,說明不可改變。 * * 注意事項: * 1.接口當中的常量,可以省略public static final,注意:不寫也照樣是這樣。 * 2.接口當中的常量,必須進行賦值,不能不賦值。 * 3.接口中常量的名稱,使用完全大寫的字母,用下劃線進行分隔。(推薦命名) * */public interface MyInterfaceConst {//這其實就是一個常量,一旦賦值,不可以修改。//shift+F6改為大寫常量,假設多個單詞,下劃線連接NUM_OF_MYCLASSpublic static final int NUM = 10; } package Demo2405;public class Demo05Interface implements MyInterfaceConst{public static void main(String[] args) {//訪問接口中常量System.out.println(MyInterfaceConst.NUM);//10} }7.接口小結
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的第24天学习Java的笔记-接口Interface的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 继承复习-发均分红包案例
- 下一篇: word中viso/math type公