2017-09-10學(xué)習(xí)記錄

今天重新學(xué)習(xí)了接口和內(nèi)部類的部分知識(shí);下面是所有的內(nèi)容:

第九章:接口

在第八章多態(tài)中,通過把子類對(duì)象的基類引用作為參數(shù)傳入方法中時(shí),用該對(duì)象調(diào)用方法時(shí),調(diào)用的是已經(jīng)被子類重載過的方法。所以在這種情況下,基類的方法具體實(shí)現(xiàn)沒有意義了。所以干脆生成一個(gè)機(jī)制:抽象;

抽象是對(duì)基類的方法設(shè)置的;抽象只只實(shí)現(xiàn)方法、參數(shù)、返回值而實(shí)現(xiàn)沒有方法主體;所以這個(gè)類具體的實(shí)現(xiàn)都在子類中實(shí)現(xiàn);抽象類指的是存有抽象方法的類,這種類不能創(chuàng)建對(duì)象;

如果一個(gè)類中所有的方法都是抽象方法,則把這種類型叫做接口(interface);接口內(nèi)部的對(duì)象都是private、static、final類型的變量,所以在接口中保存常量是很好的策略;

接口中的方法的默認(rèn)權(quán)限為public,接口則由用戶自己申明;用接口申明類用關(guān)鍵字implement,而類之間的繼承和接口之間的繼承都可以用extends;

實(shí)現(xiàn)接口判斷的只有內(nèi)部方法的實(shí)現(xiàn);若一個(gè)類和接口沒有實(shí)現(xiàn)關(guān)系,但是他內(nèi)部的方法頭部和接口內(nèi)部的方法頭部一致,則盡管他們之間沒有關(guān)系,這個(gè)類還是可以通過這個(gè)接口進(jìn)行工作;這個(gè)叫接口的解耦;

多重繼承則是用extends實(shí)現(xiàn)多個(gè)接口;不過這種情況下必須實(shí)現(xiàn)每一個(gè)接口中的方法,不然該類就是抽象類,不能創(chuàng)建對(duì)象;

接口嵌套時(shí),要正確設(shè)置接口的訪問權(quán)限,因?yàn)榻涌诤蛢?nèi)部類的權(quán)限是一樣的,它的權(quán)限已經(jīng)規(guī)定了他的工作范圍,超出了范圍則不能正確訪問;

接口的工廠我還是搞不懂;


第十章:內(nèi)部類

內(nèi)部類指的是在類的內(nèi)部定義一個(gè)類;

這和前面的組合類很相似;內(nèi)部類可以訪問外部類的所有數(shù)據(jù),還可以在子類中的方法調(diào)用父類的變量和代碼;因?yàn)樵趧?chuàng)建時(shí),它就已經(jīng)存儲(chǔ)了一個(gè)外部類的引用;而那個(gè)組合雖然也可以調(diào)用所有數(shù)據(jù),但是不能把外部類的代碼嵌入內(nèi)部類中;

上面說到內(nèi)部類中有一個(gè)外部類的引用,這個(gè)引用用(外部類名。this)來訪問,而他自身的引用則直接用this即可訪問;

關(guān)于內(nèi)部類在外部的創(chuàng)建:不是static類型的內(nèi)部類,在外部時(shí)用外部類的對(duì)象來申明;(parcel.destination ?de = parcel.new destination ( ?););若是static類型的內(nèi)部類,則可以直接當(dāng)外部類來創(chuàng)建;不過static內(nèi)部類則不能訪問外部類的非static方法,這也是一種取舍;

匿名內(nèi)部類:在外部類中直接定義的類,插在new innerClassName (){ };之間的大括號(hào)中;在這個(gè)大括號(hào)中添加類的實(shí)現(xiàn);由于是內(nèi)部類,則不能修改默認(rèn)的構(gòu)造函數(shù);

從語法上來講,這個(gè)匿名類是innerClassName類的子類;運(yùn)用了一個(gè)向上轉(zhuǎn)型;在有匿名內(nèi)部類實(shí)現(xiàn)的情況下,一般會(huì)創(chuàng)建一個(gè)方法,這個(gè)方法返回匿名類的父類,直接在返回語句中添加上定義實(shí)現(xiàn);

當(dāng)一個(gè)匿名類中的數(shù)據(jù)需要初始化時(shí),第一是對(duì)創(chuàng)建的方法中傳入的參數(shù)改成fina類型,這樣則可以在內(nèi)部類中使用這個(gè)變量;第二是直接在基類的構(gòu)造器中添加參數(shù),這時(shí)需要在innerClassName后的括號(hào)中添加這個(gè)變量;但是還是用第一種方法更好;

為什么要使用內(nèi)部類?主要原因是需要讓一個(gè)類繼承多個(gè)類。因?yàn)閖ava中一個(gè)類只能繼承單一類,其他的類如果要使用接口,則子類需要實(shí)現(xiàn)很多方法而且會(huì)有名稱相同的困擾;用內(nèi)部引用類實(shí)現(xiàn)外部的接口時(shí),用外部類的函數(shù)返回一個(gè)內(nèi)部類父類的引用時(shí),相當(dāng)于是像父類對(duì)象付給一個(gè)基類引用一樣,可以更好的實(shí)現(xiàn)多態(tài)的功能;而且內(nèi)部類之間是互相獨(dú)立的;

注:創(chuàng)建內(nèi)部類后,該內(nèi)部類和外部類兩個(gè)類在堆使用不同的內(nèi)存空間,他們之間完全靠引用進(jìn)行互相訪問數(shù)據(jù);所以內(nèi)部類是一個(gè)單獨(dú)的個(gè)體;

可以用多個(gè)內(nèi)部類繼承一個(gè)接口來實(shí)現(xiàn)類似但不同的功能,這相當(dāng)于一個(gè)接口的多功能實(shí)現(xiàn),用接口的話要申明很多的子類,在這里則只要定義多個(gè)類似的內(nèi)部類;方便管理;

還有很多沒懂的,估計(jì)要后面復(fù)習(xí)的時(shí)候才可以明白吧;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,626評(píng)論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,800評(píng)論 0 11
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請(qǐng)注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 1,268評(píng)論 0 5
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,074評(píng)論 1 15
  • 沉默的夏天 陽(yáng)光依然燦爛 艷陽(yáng)下發(fā)燙的水泥操場(chǎng) 坐著熟悉而久違的背影 或哭或笑,或嬉或鬧 毫無預(yù)警 眼淚落地砸出一...
    初潭若水閱讀 353評(píng)論 0 0

友情鏈接更多精彩內(nèi)容