【Java】6.6 Java 8 改进的结构
生活随笔
收集整理的這篇文章主要介紹了
【Java】6.6 Java 8 改进的结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
接口的概念
Java 8?中接口的定義
接口的繼承
使用接口
接口和抽象類
接口的概念
接口的作用是非常豐富的,接口往往與設計模式接口在一塊。讓規范和實現相分離,讓軟件的各組件之間面向接口耦合。
接口的概念: -? 可以認為接口是一種“徹底”的抽象類
接口:是從多個相似的類中抽取出來的一種規范。接口體現的是規范
接口的體現:通信規范
?
Java 8?中接口的定義
接口定義的語法
[修飾符] interface 接口名 extends 父接口1,父接口2,……{// 0 ~ N 個 Field 定義// 0 ~ N 個 抽象方法// 0 ~ N 個 內部類、內部接口、內部枚舉定義}修飾符:public或省略
接口名:多個單詞拼接而成,且每個單詞的首字母大寫。推薦接口用“形容詞”。
? ? ? ? ? ? (因為C#推薦接口名以I開頭,Java程序員沿用了這種方法)
【注意】
Output.java
public interface Output {//接口里定義的成員變量均為常量int MAX_CACHE_LINE = 50 ;//以上相當于public static final int MAX_CACHE_LINE = 50 ;//往接口里定義抽象方法,且抽象方法只能用public修飾void out();void getData(String msg);//在接口中定義默認方法,需要使用default修飾default void print(String... msgs) {for(String msg:msgs) {System.out.println(msg);}}default void test() {System.out.println("默認的test()方法");}//在接口中定義類方法,需要static修飾static String staticTest() {return "function in the static class";} }OutputTest.java
public class OutputFieldTest {public static void main(String[] args) {//訪問另一個包中的Output接口中飛MAX_CACHE_LINESystem.out.println(Output.MAX_CACHE_LINE);//在這里給MAX_CACHE_LINE重新賦值會出現編譯異常System.out.println(Output.staticTest());} }/* 50 function in the static class */接口的繼承
一個接口可以有N個直接父接口,這是與類繼承的不同點。
//格式 interface Ia{} interface Ib{} interface Ic extends Ia,Ib{}使用接口
有了接口:
implements實現一個或N個接口。(體會類的繼承和接口繼承)
[修飾符] class 類名 extends 父類 implements 父接口1,父接口2,……{// 0 ~ N 個 Field 定義// 0 ~ N 個 抽象方法// 0 ~ N 個 內部類、內部接口、內部枚舉定義}當一個類實現接口之后:實現類要么為接口的的所有抽象方法提供實現。否則你的實現類也只能是抽象類。接口主要實在“面向接口編程”時提供更靈活的機制。(可以吧實現接口理解為一種特殊的繼承,相當于實現類繼承了一個徹底抽象的類)
interface Product{//這是一個接口中的抽象方法,全部是public abstract int getProduceTime()int getProduceTime(); } public class Printer implements Output,Product{private String[] printData = new String[MAX_CACHE_LINE];//用以記錄當前需要打印的作業數private int printNum = 0;//作用:打印函數public void out() {//若有作業,繼續打印while(printNum>0) {System.out.println("打印機打印"+printData[0]);//所有字符向前挪1位/** System.arraycop的API:* public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)*將指定源數組中的數組從指定位置復制到目標數組的指定位置。* */System.arraycopy(printData, 1, printData, 0, --printNum);}}//作用:判斷打印的字符串是否超過規定值public void getData(String msg) {if(printNum>=MAX_CACHE_LINE) {System.out.println("輸出隊列已滿,添加失敗");}else {//把打印數據添加到隊列里,已保存數據的數量+1printData[printNum++]=msg;}}public int getProduceTime() {return 45;}public static void main(String[] args) {//向上轉型,編譯時o是Output類型,運行時o時Printer類型Output o = new Printer();o.getData("我在加強Java的基礎學習");o.getData("學習的有點慢");//開始打印o.out();//調用Output里的print(String... msgs)方法o.print("孫悟空","豬八戒","沙和尚");//創建一個Printer對象,當成Product使用Product p = new Printer();System.out.println(p.getProduceTime());//接口不能顯式繼承任何類,但是所有接口的引用類型都是可以賦值給ObjectObject obj = p;} }/*輸出的內容:* 打印機打印我在加強Java的基礎學習打印機打印學習的有點慢孫悟空豬八戒沙和尚45* * */接口和抽象類
接口對于實現者而言,規定了必須向外提供哪些服務;對調用者而言,規定了可以調用哪些服務
【接口和抽象類的異同】
相似
區別
總結
以上是生活随笔為你收集整理的【Java】6.6 Java 8 改进的结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】6.5 抽象类
- 下一篇: 【Java】6.7 内部类