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