1. 程式人生 > 其它 >一、RabbitMQ 的概念

一、RabbitMQ 的概念

多型指的是同一個方法呼叫,由於物件不同可能會有不同的行為。現實生活中,同一個方法,具體實現會完全不同。 比如:同樣是呼叫人的“休息”方法,張三是睡覺,李四是旅遊,高淇老師是敲程式碼,數學教授是做數學題; 同樣是呼叫人“吃飯”的方法,中國人用筷子吃飯,英國人用刀叉吃飯,印度人用手吃飯。

多型的要點:

1. 多型是方法的多型,不是屬性的多型(多型與屬性無關)。

2. 多型的存在要有3個必要條件:繼承,方法重寫,父類引用指向子類物件。

3. 父類引用指向子類物件後,用該父類引用呼叫子類重寫的方法,此時多型就出現了。

【示例5-12】多型和型別轉換測試

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 classAnimal{ publicvoidshout(){ System.out.println("叫了一聲!"); } } classDogextendsAnimal{ publicvoidshout(){ System.out.println("旺旺旺!"); } publicvoidseeDoor(){ System.out.println("看門中...."); } } classCatextendsAnimal{ publicvoidshout(){ System.out.println("喵喵喵喵!"); } } publicclassTestPolym{ publicstatic
voidmain(String[]args){ Animala1=newCat();//向上可以自動轉型 //傳的具體是哪一個類就呼叫哪一個類的方法。大大提高了程式的可擴充套件性。 animalCry(a1); Animala2=newDog(); animalCry(a2);//a2為編譯型別,Dog物件才是執行時型別。 //編寫程式時,如果想呼叫執行時型別的方法,只能進行強制型別轉換。 //否則通不過編譯器的檢查。 Dogdog=(Dog)a2;//向下需要強制型別轉換 dog.seeDoor(); } //有了多型,只需要讓增加的這個類繼承Animal類就可以了。 staticvoidanimalCry(Animala){
a.shout(); } /*如果沒有多型,我們這裡需要寫很多過載的方法。 *每增加一種動物,就需要過載一種動物的喊叫方法。非常麻煩。 staticvoidanimalCry(Dogd){ d.shout(); } staticvoidanimalCry(Catc){ c.shout(); }*/ }

執行結果如圖5-17所示:

圖5-17 示例5-12執行效果圖

示例5-12給大家展示了多型最為多見的一種用法,即父類引用做方法的形參,實參可以是任意的子類物件,可以通過不同的子類物件實現不同的行為方式。

由此,我們可以看出多型的主要優勢是提高了程式碼的可擴充套件性,符合開閉原則。但是多型也有弊端,就是無法呼叫子類特有的功能,比如,我不能使用父類的引用變數呼叫Dog類特有的seeDoor()方法。

那如果我們就想使用子類特有的功能行不行呢?行!這就是我們下一章節所講的內容:物件的轉型。