1. 程式人生 > 其它 >java多型~應用~向上轉型,向下轉型

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 相當於看一下大禮盒的小標籤,發現大紙盒放的是啥)]