內(nèi)部類(lèi)

<small>
1、多態(tài)
1)、兩種表現(xiàn)形式:
a、一個(gè)對(duì)象,多種形態(tài)。
同一個(gè)對(duì)象,在不同場(chǎng)合下,
表現(xiàn)出不同的形態(tài),能完成不同的功能。

    在java中,往往使用implements關(guān)鍵字,實(shí)現(xiàn)多個(gè)接口。

    //同一個(gè)人
    CC peo = new CC();
    
    //同一個(gè)人,在不同的場(chǎng)合,表現(xiàn)出不同的形態(tài)
    //不同角色,表現(xiàn)的行為也不一樣。
    Teacher teacher = peo;
    teacher.teach();//老師可以講課
    
    Father father = peo;
    father.talkToSon();//父親教育孩子
    
    Husband husband = peo;
    husband.giveMySalary();//丈夫上交工資

b、多個(gè)對(duì)象,同一形態(tài)。
    不同對(duì)象,向上造型成同一種類(lèi)型。
    實(shí)現(xiàn)相同的功能。
    
    在java中,往往使用extends關(guān)鍵字,繼承同一個(gè)父類(lèi)。

    Tiger tiger = new Tiger();
    tiger.name = "小王";
    
    Snake snake = new Snake();
    snake.name = "莽山烙鐵頭";
    
    Lion lion = new Lion();
    lion.name = "東北獅王";
    
    //不同對(duì)象,表現(xiàn)出同一種形態(tài)。
    Animal animal1 = tiger;
    Animal animal2 = snake;
    Animal animal3 = lion;

2、引用類(lèi)型強(qiáng)制類(lèi)型轉(zhuǎn)換
回顧:基本類(lèi)型強(qiáng)制類(lèi)型轉(zhuǎn)換
long l = 1000;
int i = (int)l;
byte b = (byte)i;//溢出

Animal animal = new Tiger();
animal.name = "小王";
    
//引用類(lèi)型強(qiáng)制類(lèi)型轉(zhuǎn)換
Lion lion = (Lion)animal;//錯(cuò)誤,會(huì)導(dǎo)致類(lèi)型轉(zhuǎn)換異常ClassCastException

instanceof關(guān)鍵字:
可用于在引用類(lèi)型轉(zhuǎn)換之前,實(shí)現(xiàn)類(lèi)型判斷。
符合轉(zhuǎn)換匹配的類(lèi)型,方能實(shí)現(xiàn)強(qiáng)制類(lèi)型轉(zhuǎn)換。

有效的避免了引用類(lèi)型轉(zhuǎn)換異常的發(fā)生。

語(yǔ)法:
大類(lèi)型 大類(lèi)型引用 = new 小類(lèi)型();

if(大類(lèi)型引用 instanceof 小類(lèi)型){//類(lèi)型判斷
    //類(lèi)型匹配
    小類(lèi)型 小類(lèi)型引用 = (小類(lèi)型)大類(lèi)型引用;
}
    
//引用類(lèi)型強(qiáng)制類(lèi)型轉(zhuǎn)換
Lion lion = (Lion)animal;//錯(cuò)誤
改造成
if(animal instanceof Lion){
    //只有匹配才能進(jìn)來(lái)
    Lion lion = (Lion)animal;
}

3、方法重寫(xiě)要求:
a、發(fā)生在子父類(lèi)之間
b、方法名相同、參數(shù)列表相同
c、訪問(wèn)權(quán)限不能變小
d、拋出異常不能變大
e、返回值類(lèi)型可以是本類(lèi)或其子類(lèi)

********************** pm ************************
1、內(nèi)部類(lèi)
class:類(lèi)
class:實(shí)體類(lèi)
abstract class:抽象類(lèi)

1)、內(nèi)部類(lèi)
定義在類(lèi)內(nèi)部的類(lèi),稱(chēng)為內(nèi)部類(lèi)。
類(lèi)內(nèi)部:
類(lèi)體、方法體。

2)、內(nèi)部類(lèi)定義
外部類(lèi):定義了內(nèi)部類(lèi)的類(lèi)。
內(nèi)部類(lèi):定義在外部類(lèi)中的類(lèi)。

class Outer{//外部類(lèi)
    class Inner{//內(nèi)部類(lèi)

    }
}
只要是類(lèi),類(lèi)中可定義:成員變量、方法、靜態(tài)塊。

3)、內(nèi)部類(lèi)的使用
a:創(chuàng)建內(nèi)部類(lèi)對(duì)象
step1:先創(chuàng)建外部類(lèi)對(duì)象。
step2:再通過(guò)外部類(lèi)創(chuàng)建內(nèi)部類(lèi)對(duì)象。

b、在外部類(lèi)外面
對(duì)內(nèi)部類(lèi)屬性使用、方法調(diào)用
與普通類(lèi)的屬性使用、方法調(diào)用一致。
通過(guò)引用.屬性,引用.方法

c、內(nèi)部類(lèi)中(**注意)
調(diào)用內(nèi)部類(lèi)屬性:this.屬性;
調(diào)用外部類(lèi)屬性:外部類(lèi)名.this.屬性;

4)、內(nèi)部類(lèi)意義
封裝在內(nèi)部類(lèi)的中代碼,不可以直接訪問(wèn),必須先創(chuàng)建
外部類(lèi)對(duì)象,通過(guò)外部類(lèi)對(duì)象創(chuàng)建內(nèi)部類(lèi)對(duì)象,才能訪問(wèn)。
一定程度上,起到了代碼保護(hù)效果。

PS:普通內(nèi)部類(lèi)很少使用。

2、匿名內(nèi)部類(lèi)
1)、匿名內(nèi)部類(lèi)

    class Outer{//外部類(lèi)
        class {//匿名內(nèi)部類(lèi)??????
}
    }
上述定義是錯(cuò)誤的。

2)、匿名內(nèi)部類(lèi)定義
某個(gè)類(lèi)的匿名內(nèi)部類(lèi),并非直接在類(lèi)中定義。
在外部類(lèi)對(duì)象創(chuàng)建的時(shí)候定義。
step1:先創(chuàng)建外部類(lèi)對(duì)象
OuterClass outer = new OuterClass();
step2:在外部類(lèi)創(chuàng)建對(duì)象的()與;中間,
添加一對(duì){},則{}即為匿名內(nèi)部類(lèi)類(lèi)體。
step3:匿名內(nèi)部類(lèi)中可以定義屬性、方法。

3)、匿名內(nèi)部的使用。
匿名內(nèi)部類(lèi)屬性,只能在匿名內(nèi)部類(lèi)中使用。

匿名內(nèi)部類(lèi)的方法,無(wú)法直接“調(diào)用”。
   只能通過(guò)匿名內(nèi)部類(lèi)重寫(xiě)外部類(lèi)的方法,才能調(diào)用。

4)、****什么時(shí)候使用匿名內(nèi)部類(lèi)?
抽象類(lèi)、接口都是無(wú)法實(shí)例化的。

抽象類(lèi) 引用 = new 抽象類(lèi)();//不可以
接口 引用 = new 接口();//不可以

如何實(shí)現(xiàn)抽象類(lèi)、接口的“實(shí)例化”?
    都是先讓實(shí)體類(lèi)繼承抽象類(lèi),實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)接口,
    然后通過(guò)向上造型方式,完成抽象類(lèi)、接口的“實(shí)例化”。
    抽象類(lèi) 引用 = new 實(shí)體類(lèi)();//可以
    接口 引用 = new 實(shí)現(xiàn)類(lèi)();//可以
    
如果抽象類(lèi)的實(shí)體類(lèi)、接口的實(shí)現(xiàn)類(lèi),極少使用,
那作為單獨(dú)一個(gè)類(lèi)出現(xiàn)就沒(méi)有多大意義。

實(shí)體類(lèi)、實(shí)現(xiàn)類(lèi)就可以通過(guò)匿名內(nèi)部類(lèi)方式來(lái)實(shí)現(xiàn)。

2、封裝
封裝不是單純的知識(shí)點(diǎn),而是一種思想。
方法:對(duì)特定功能代碼的封裝
類(lèi):對(duì)具有相似特征,相同行為的對(duì)象群體的封裝。
對(duì)象特征 → 類(lèi)的屬性
對(duì)象行為 → 類(lèi)的方法

子父類(lèi):對(duì)繼承、公有代碼的封裝。
抽象方法:對(duì)沒(méi)有具體實(shí)現(xiàn)的方法進(jìn)行封裝。
抽象類(lèi):對(duì)具有抽象方法的類(lèi)、對(duì)代碼需要保護(hù)的類(lèi)的封裝。
接口:對(duì)規(guī)范、標(biāo)準(zhǔn)的封裝。
內(nèi)部類(lèi):對(duì)代碼保護(hù)封裝
匿名內(nèi)部類(lèi):對(duì)抽象類(lèi)的實(shí)體類(lèi)、接口的實(shí)現(xiàn)類(lèi)的封裝。

單獨(dú)“封裝知識(shí)點(diǎn)”:
對(duì)于私有屬性、私有方法,進(jìn)行封裝。

step1:采用private訪問(wèn)權(quán)限修飾。
    對(duì)屬性、方法,起到只能在本類(lèi)中才能使用。

step2:屬性賦值
      方式一:
    通過(guò)構(gòu)造方法,創(chuàng)建對(duì)象的同時(shí),
    給私有屬性賦值。

      方式二:
    當(dāng)屬性添加private訪問(wèn)權(quán)限時(shí),則需要
    對(duì)外提供統(tǒng)一的賦值、取值的方法入口。

    賦值:set方法
    取值:get方法

step3:編寫(xiě)set、get方法
    a、set方法:
    private String name;

    public void setName(String name){
        this.name = name;
    }

    b、get方法:
    public String getName(){
        return this.name;
    }


步驟:
1、對(duì)私有屬性進(jìn)行private私有化操作。
2、對(duì)私有屬性向外提供統(tǒng)一的入口方法:set、get方法

為什么要私有化操作:
    提高代碼的安全性。
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Java 內(nèi)部類(lèi) 分四種:成員內(nèi)部類(lèi)、局部?jī)?nèi)部類(lèi)、靜態(tài)內(nèi)部類(lèi)和匿名內(nèi)部類(lèi)。 1、成員內(nèi)部類(lèi): 即作為外部類(lèi)的一個(gè)成...
    ikaroskun閱讀 1,357評(píng)論 0 13
  • 一、繼承 當(dāng)兩個(gè)事物之間存在一定的所屬關(guān)系,即就像孩子從父母那里得到遺傳基因一樣,當(dāng)然,java要遺傳的更完美,這...
    玉圣閱讀 1,122評(píng)論 0 2
  • 一、多態(tài) 1. 概述 理解:多態(tài)可以理解為事物存在的多種體(表)現(xiàn)形態(tài)。例如:動(dòng)物中的貓和狗。貓這個(gè)對(duì)象對(duì)應(yīng)的是貓...
    陳凱冰閱讀 379評(píng)論 0 1
  • We believe that writing is about content, about what you ...
    hongXkeX閱讀 292評(píng)論 0 0
  • 斜風(fēng)起,細(xì)柳柔。 日落人去欲還休,眉低皺,問(wèn)君為誰(shuí)憂(yōu)?喚醒許多愁。 秋雨落,隨波流。 黃葉飄零華珠露,欲解憂(yōu),縱然...
    雨韓閱讀 532評(píng)論 44 24

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