多態中的轉型

image.png

image.png

image.png

可以使用instanceof協助判斷轉型


package com.itheima.order;
import java.util.Scanner;

public class Test {

    /* ClassCastException : 类型转换异常
 在引用数据类型的强转中, [实际类型]和[目标类型]不匹配, 就会出现此异常
     */

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入:  1. 国内订单   2. 国外订单");

  

        OrderService orderService = null;

  

        int choice = sc.nextInt();

        switch (choice) {

            case 1:

                // 创建国内订单的业务类

                orderService = new OrderServiceImpl();

                break;

            case 2:

                // 创建国外订单的业务类

                orderService = new OverseasServiceImpl();

                break;

        }

		  // 這邊打算使用OverseasServiceImpl中的check方法
		  // 但若直接加上會報錯
		  // 1.多態無法取得子類獨特的方法
		  // 2.儘管向下轉型,一旦選到case1使用OrderServiceImpl因為沒有
		  // 這個方法,也是會報錯,因此加上instanceof協助判斷

		 // instanceof : 判断左边的引用, 是否是右边的数据类型

        if(orderService instanceof OverseasServiceImpl){
			//向下轉型 為了取用子類的獨特方法
            OverseasServiceImpl osi = (OverseasServiceImpl) orderService;

            osi.check();

        }

  

        orderService.create();

        orderService.findOne();

        orderService.findList();

        orderService.cancel();

        orderService.finish();

        orderService.paid();

    }

}