2018-09-25多態(tài)內(nèi)存分析、抽象類、接口類、

1.多態(tài)內(nèi)存分析:

? ? 代碼示列:

class Animal {

String str;

public void voice() {

? ? ? ? System.out.println("叫了一聲!");

? ? }

}

class Cat extends Animal{

public void voice() {

? ? ? ? System.out.println("喵喵喵!");

? ? }

public void catchMouse(){

????System.out.println("抓老鼠!");

????}

}

public class Test {

????public static void testAnalVoice(Animal c){

????c.voice();

????if(c instanceof Cat){

????????((Cat) c).catchMouse();

????}

????//......

}

????//先java Test會(huì)創(chuàng)建棧、堆、方法區(qū)首先在方法區(qū)加載信息(類有繼承關(guān)系)看圖

????public static void main(String[] args) {

????????Animal a = new Cat();

????????Cat a2 = (Cat)a;//強(qiáng)制把Animal 轉(zhuǎn)換為Cat

????????testAnalVoice(a);

????}

}

看main中的執(zhí)行代碼內(nèi)存分析圖

public class HttpServlet {

????public void service(){

????????System.out.println("在service()調(diào)用了doGet()");

????????doGet();//隱式了this

????}

????public void doGet(){

????????System.out.println("doGet()");

????}

}

public class MyServlet extends HttpServlet{

????@Override

????public void doGet() {

????????System.out.println("MyServlet.doGet()");

????}

????public static void main(String[] args) {

????????HttpServlet h = new MyServlet();

????????h.service();

}

????/**out調(diào)用了子類的東西

????* 在service()調(diào)用了doGet()

????MyServlet.doGet()

????*/

}


下圖中的隱式的this是堆最終的那個(gè)類中的調(diào)用

2.抽象類:

.為什么需要抽象類?

抽象類是一種模版模式。抽象類為所有子類提供了一個(gè)通用模版,子類可以在這個(gè)模版基礎(chǔ)上進(jìn)行擴(kuò)展。

通過(guò)抽象類,可以避免子類設(shè)計(jì)的隨意性,通過(guò)抽象類,我們可以做到嚴(yán)格限制子類的設(shè)計(jì),使子類之間更加通用。

.抽象類的使用要點(diǎn)

????1.? ??通過(guò)抽象類,可以避免子類設(shè)計(jì)的隨意性。

????2.? ??有抽象方法的類只能定義能抽象類

????3.? ??抽象類不能實(shí)例化,及不能用new來(lái)實(shí)例化抽象類。

????4.? ??抽象類可以包含屬性、方法、構(gòu)造方法。但是構(gòu)造方法不能用來(lái)new實(shí)例,只能用來(lái)被子類調(diào)用。

?????5.? ??抽象類只能用來(lái)繼承。

????6.? ??抽象方法必須被子類實(shí)現(xiàn)。

3.接口類

接口使用要點(diǎn)

1.子類通過(guò)implements來(lái)實(shí)現(xiàn)接口中的規(guī)范

2.接口不能創(chuàng)建實(shí)例,但是可用于聲明引用變量類型。

3.一個(gè)類實(shí)現(xiàn)了接口,必須實(shí)現(xiàn)接口中所有的方法,并且這些方法只能是public的。

4.接口中只能包含靜態(tài)常量、抽象方法,不能有普通屬性、構(gòu)造方法、普通方法。

5.常量必然是:public?static?final。??我們不加這些修飾符,也是這樣。

6.方法必然是:public?abstrac。??我們不加這些修飾符,也是這樣。

7.接口完全支持多繼承。和類的繼承類似,子接口擴(kuò)展某個(gè)父接口,將會(huì)獲得父接口中所定義的一切。

4.回調(diào)的實(shí)現(xiàn)

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

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