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)

