淺談java繼承、多態(tài)、封裝

1、繼承 ->is a(你是人,蘋果是水果,)

1)語法

public? class? <子類>? extends? <父類>{

}

2)子類使用父類的方法

3)子類覆蓋父類的方法

父類只定義共性的行為(做什么),如何做(如何吃飯),下沉到子類完成

4)protected? 保護(hù)

介于public 和 private之間

主要用于繼承

訪問修飾符? ? ? ? ? 本類? ? 同一包? ? ? 子類? ? ? 外部

private? ? ? ? ? ? ? ? ? Y? ? ? ? ? N? ? ? ? ? ? N? ? ? ? ? ? N

friendly(默認(rèn))? ? ? ? Y? ? ? ? ? Y? ? ? ? ? ? N? ? ? ? ? ? ?N

protected? ? ? ? ? ? ? Y? ? ? ? ? ?Y? ? ? ? ? ?Y? ? ? ? ? ? ?N

public? ? ? ? ? ? ? ? ? ? Y? ? ? ? ? Y? ? ? ? ? ? Y? ? ? ? ? ? ?Y

public? 可以修飾屬性、方法、類

private 可以修飾屬性、方法?

protected 可以修飾屬性、方法?

friendly(默認(rèn))? 可以修飾? 屬性、方法、類

向上轉(zhuǎn)型 upcasting

First:返回類型的向上轉(zhuǎn)型

int num =10;

long result = num;

父類的引用指向子類的對(duì)象,叫做向上轉(zhuǎn)型。

tom是對(duì)象的一個(gè)引用,可以看做Student類型,也可以看做Person類型

Person tom = new Student();

Second:參數(shù)的向上轉(zhuǎn)型

main(String args[]){

int num1 = 10;

int num2 = 20;

add(num1,num2);

}

public? static void add(long first,long second){

System.out.println(first+second);

}

向上轉(zhuǎn)型有一個(gè)支撐點(diǎn):繼承

好處:工作中去掉很多重復(fù)的代碼

只針對(duì)父類的編程

注意:java只支持單繼承(子類最多只能有一個(gè)父類)

工作中什么情況下使用繼承?

只有需要向上轉(zhuǎn)型的時(shí)候用繼承

2、多態(tài) has a

什么是多態(tài)?

? 程序在運(yùn)行期判斷對(duì)象類型,調(diào)用恰當(dāng)方法(只有在運(yùn)行期才知道創(chuàng)建哪個(gè)類型的對(duì)象)

? 特征:1做什么和怎么做分離

? 在父類定義做什么,怎么做下沉到子類

? 父類只定義共性的行為

? 2讓不變的事物和變動(dòng)的事務(wù)隔離

? ? 不變的事物:所有的形狀都可以繪畫

? ? 變化的事物:每一種形狀化的方式不一樣

? ? 不變的事物抽象為父類,變化的事物下沉到子

????在父類定義的方法,子類重新定義

????多態(tài):運(yùn)行時(shí)判斷對(duì)象類型,調(diào)用恰當(dāng)?shù)姆椒?/p>

????特征:父類定義做什么,如何做下沉到子類

? ? 針對(duì)父類的編程,忽略子類的存在

????每個(gè)子類實(shí)現(xiàn)的方式不同(圓形和三角形畫的方式不一樣)

????對(duì)象有兩種狀態(tài),1編譯期狀態(tài)(父類)

2 運(yùn)行期狀態(tài)(子類)

????Java支持向上轉(zhuǎn)型,對(duì)象的狀態(tài)在運(yùn)行期會(huì)進(jìn)行識(shí)別

????支撐點(diǎn):方法覆蓋? & 向上轉(zhuǎn)型?

3、封裝?

在面向?qū)ο蟪淌皆O(shè)計(jì)方法中,封裝(英語:Encapsulation)是指,一種將抽象性函式接口的實(shí)作細(xì)節(jié)部份包裝、隱藏起來的方法。?

封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問。?

要訪問該類的代碼和數(shù)據(jù),必須通過嚴(yán)格的接口控制。?

封裝最主要的功能在于我們能修改自己的實(shí)現(xiàn)代碼,而不用修改那些調(diào)用我們代碼的程序片段。?

適當(dāng)?shù)姆庋b可以讓程式碼更容易理解與維護(hù),也加強(qiáng)了程式碼的安全性。?

public class Student {

/**

* 學(xué)生的名稱

*/

String stuName;

Student(){

stuName="Tom";

}

/**

* 學(xué)生具有學(xué)習(xí)行為

*/

public void study(){

System.out.println(stuName+"正在學(xué)習(xí)");

}

}

public class TestStudent {

public static void main(String[] args) {

Student tom = new Student();

tom.study();

}

}

最后編輯于
?著作權(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)容

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