09_多态

09_多态

多态的概述

多态:多种形态。

多态是允许你将父对象(父类引用)设置成为一个或更多的它的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

通俗点记忆: 一切使用父类引用的地方都可以传入其子类对象,执行时会根据不同的子类对象而执行不同的操作(行为/方法)。

多态的使用

使用时要满足继承、方法重写

父类的引用作为方法形参

public void 方法名(父类 参数名) {
    
}

// 汽车租赁系统   变量初始化
private static Vehicle[] vehicleArr = new Vehicle[8];
static {
    vehicleArr[0] = new Car("宝马", "京NY28588", 800, "X6");
    vehicleArr[1] = new Car("宝马", "京CNY3284", 600, "550i");
    vehicleArr[2] = new Car("别克", "京NT37465", 300, "林荫大道");
    vehicleArr[3] = new Car("别克", "京NT96968", 600, "GL8");
    vehicleArr[4] = new Bus("金杯", "京6566754", 800, 16);
    vehicleArr[5] = new Bus("金杯", "京9696996", 1500, 34);
    vehicleArr[6] = new Bus("金龙", "京8696997", 800, 16);
    vehicleArr[7] = new Bus("金龙", "京8696998", 1500, 34);
}

调用该方法时,可以传入所有该父类的子类对象。

在多态的使用下,通过父类的引用调用方法,最终会根据当前实际的子类对象,执行对应子类重写后的方法

父类的引用作为方法返回值类型

public 父类 方法名(用于选择不同对象的参数) {
    // 通过判断参数,可以明确返回哪一个子类对象
	return 子类对象;
}
汽车租赁系统的选车方法
/*
* 选车
*/
public Vehicle findVehicle(String brand, String type, int seatCount) {
    for (Vehicle vehicle : vehicleArr) {
        if (vehicle instanceof Car) {
            Car car = (Car)vehicle;
            if (car.getBrand().equals(brand) && car.getType().equals(type)) {
                return car;
            }
        } else if (vehicle instanceof Bus) {
            Bus bus = (Bus)vehicle;
            if (bus.getBrand().equals(brand) && bus.getSeatCount() == seatCount) {
                return bus;
            }
        }
    }
    return null;
}

调用该方法,可以返回该父类的子类对象。

类型转换

联想自动类型转换和强制类型转换

向上转型

// Cat cat = new Cat();
Pet pet = new Cat();

向下转型

在父类引用无法拿到子类对象的特有信息时(方法、属性),可以对其进行向下转型。

Pet pet = new Cat();
// 向下转型(风险:类型转换错误)
Cat cat = (Cat) pet;

为了防止向下转型出现类型转换错误的问题,Java 提供了 instanceof 关键词,用于判断对象是否属于指定类型。

instance:实例/对象 of:…的

// 这个对象是不是这个类型的实例呢?
boolean xx = 对象名 instanceof 类型名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值