java多型~應用~向上轉型,向下轉型
java多型~應用~向上轉型、向下轉型【instanceof】
1,java多型定義:一個實體具有多種形態。
2,實現多型的前提:(1)繼承(2)重寫(3)父類引用指向子類物件
3,多型應用~向上轉型、向下轉型
先打個比方,關於的多型,某些業務場景的使用情況。
例如,咱是做生意的,為了好看搞起包裝紙盒。咱的紙盒可以放糖果、蘋果、小卡片。
(做生意要講究分門別類。紙盒放了糖果就只放糖果;放蘋果只放蘋果;放小卡片只放小卡片。)
向上轉型:子類放到父類裡。[父類引用指向子類物件]: 紙盒=糖果; 或者 紙盒=蘋果; 或者 紙盒=小卡片。
向下轉型:前提是有一個指向子類的父類引用。打比方,咱的禮盒要有東西,向下轉型,即要取出來子類,
要取出來,說明得想有東西:即一個指向子類的父類引用。例子:咱的禮盒放了糖果,【禮盒=糖果】,向下轉型,取出子類~糖果:糖果=(糖果)禮盒。
4,程式碼例子:多型這方面的具體應用:包括了一個工廠模式:
咱就以咱的紙盒、糖果、蘋果、小卡片為例子舉個工廠模式的例子:
❀interface PaperBox
package DownwardTransition; /**紙盒介面 * @author Huangyujun * */ public interface PaperBox { }
❀class Apple
package DownwardTransition; /** * 蘋果類 *@author Huangyujun * */ public class Apple implements PaperBox { public void sendApple() { System.out.println("送你個apple"); } }
❀class Candy
package DownwardTransition; /** * 糖果類 * @author Huangyujun * */ public class Candy implements PaperBox { public void sendCandy() { System.out.println("吃糖快樂!"); } }
❀class Card
package DownwardTransition; /** * 卡片類 * @author Huangyujun * */ public class Card implements PaperBox{ public void sendCard() { System.out.println("送你一張小卡片!"); } }
❀class SendFactories
package DownwardTransition; import java.util.Objects; import DownwardTransition.Candy; import DownwardTransition.Card; import DownwardTransition.Apple; import DownwardTransition.PaperBox; /** * 送貨工廠 * @author Huangyujun * */ public class SendFactories { /**送貨啦 * @param paperBox */ public static void send(PaperBox paperBox) { if(Objects.isNull(paperBox)) { //先判斷紙盒是不是空的 System.out.println("紙盒空空如也,送你個錘子"); //先判斷紙盒是不是裝有蘋果(紙盒父類指向蘋果子類) //instanceof 例項的意思 "paperBox instanceof Apple",判斷紙盒的例項是否為蘋果 }else if(paperBox instanceof Apple) { ((Apple) paperBox).sendApple(); }else if(paperBox instanceof Card) { ((Card) paperBox).sendCard(); }else if(paperBox instanceof Candy) { ((Candy) paperBox).sendCandy(); } } }
❀class test
package DownwardTransition; /** * 測試類 * @author Huangyujun * */ public class test { public static void main(String[] args) { PaperBox paperBox = new Apple(); //向上轉型 //呼叫工廠模式,發貨 SendFactories.send(paperBox); //內部是向下轉型 } }
測試結果截圖:
總結:向上、向下轉型的好處:還是打比方:
“向上轉型” 好比做生意時,咱知道了給咱的東西包裝個紙盒更容易賣出去,但是紙盒不得要成本嗎,我們火速搜尋全網,
發現了一種紙盒看上去包裝啥都挺合適的,“包萬物的紙盒”,一看價格真香,比較價格時發現,
與其為每個商品購買其獨特的包裝禮盒(成本一算太高,不值得),還是“萬能大紙盒”香。
“向上轉型”:就是咱的小商品的包裝都可以是一個合適它的大紙盒。【父類~大紙盒 指向 子類~某種小商品】
“向下轉型”:就是取出(放了小商品的)大紙盒的小商品 [通過instanceof 判斷一下之前放的小商品是什麼型別的
(instanceof 相當於看一下大禮盒的小標籤,發現大紙盒放的是啥)]