日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】6.6 Java 8 改进的结构

發(fā)布時間:2025/3/20 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】6.6 Java 8 改进的结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

接口的概念

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程序員沿用了這種方法)

【注意】

  • 接口不能有構(gòu)造器,也不能有初始化
  • 接口里的Field默認(rèn)有三種修飾符:public? ? static? ?final(不論程序員寫或者不寫,他都存在)
  • 接口里的方法默認(rèn)有兩個:public? ?abstract(不論程序員寫或者不寫,他都存在)
  • 接口里的內(nèi)部類、內(nèi)部接口、內(nèi)部枚舉,默認(rèn)也有2個修飾符:public?static(不論程序員寫或者不寫,他都存在)
  • 一個接口可以有N個直接父類接口
  • Java 8允許在接口中設(shè)置默認(rèn)方法,但默認(rèn)方法一定要 default 修飾,另外該方法不能用 static 修飾;而類方法只能有static修飾,該方法不能由default修飾。
  • 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{}

    使用接口

    有了接口:

  • 接口可用于定義變量,也可用于強(qiáng)制類型轉(zhuǎn)換
  • 接口不能直接創(chuàng)建實(shí)例,但可以調(diào)用接口中的常量
  • 接口最大用途就是供其他類來實(shí)現(xiàn)自己(是不是很像抽象方法?)
  • 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ù)

    【接口和抽象類的異同】

    相似

  • 都可以包含抽象方法
  • 都不能創(chuàng)建實(shí)例
  • 子類繼承抽象類、實(shí)現(xiàn)了接口,都要求實(shí)現(xiàn)所有的方法,否則子類也只能是抽象類
  • 區(qū)別

  • 接口里只能有抽象方法,但抽象類可以沒有抽象方法,只包含普通方法
  • 接口里不能定義靜態(tài)方法(為什么?),但抽象類中可以包含靜態(tài)方法
  • 接口里的 Field 總有總有 public?static?final ,但抽象類中的 Field 完全可以是最普通的Field
  • 接口不能包含構(gòu)造器,但抽象類可以使用構(gòu)造器?
  • 接口不能包含初始化塊,但抽象類可包含初始化塊
  • 接口可以有多個直接的父接口,但是抽象類只能有一個父接口
  • 總結(jié)

    以上是生活随笔為你收集整理的【Java】6.6 Java 8 改进的结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。