多态-面向对象三大特性之一

本文深入探讨了面向对象编程中多态特性的核心概念及其应用。通过实例讲解了多态如何解决代码扩展性问题,提高程序的灵活性和复用性。详细介绍了多态在方法参数和返回值中的使用,以及类型转换的重要性和安全性。

多态-面向对象三大特性之一

1、为什么需要多态?

2、多态概述

3、多态使用

4、类型转换


一、为什么需要多态?

需求:现在拥有了连个宠物类:猪类、狗类、,定义了主人类要求提供给宠物喂食的方法。

1、使用原来的方法

问题:主人类需要定义喂食?的方法还要定义喂食狗的方法…

还有当新增宠物之后,我们还需要在定义新的宠物喂食方法这种方式扩展性太差

2、采用多态来实现程序扩展性的提升。

直接定义为喂食宠物的方法,未来所有宠物的子类对象都可以使用此方法。


二、多态概述

一切使用父类引用的地方都可以传入其子类对象。

多态(多种形态):同一个引用类型,使用不同的实例而执行不同操作。


三、多态使用

​ 3.1父类的引用作为方法形参

// Pet pet  父类的引用可以传入子类的对象
// 未来这个方法可以传入所有的宠物Pet的子类对象
// Pet pet = new Pet();
public void feedPet(Pet pet) {
    System.out.println("主人正在喂食!");
    pet.eat();
}

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

// 需求:定义一个领养宠物的方法  最终能够得到一个宠物
// 反射技术
// Pet pet = new Dog();
// Pet pet = new Pig();
// Pet pet = null;
public Pet getPet(int flag) {
    if(flag == 1) {
        return new Dog("旺财",12,20,99);
    }else if(flag == 2) {
        return new Pig("小猪", "花猪", 20, 30);
    }else {
        return null;
    }
}


四、类型转换

自动类型转换

强制类型转换

public class Test {

	public static void main(String[] args) {
		
		Master master = new Master();
		// Pet pet = new Dog();
		Pet pet = master.getPet(1);
		// pet.eat();
//		pet.sleep(); 父类的引用虽然指向了子类对象 但是父类的引用无法使用子类特有的信息
		// 如果真的要使用 需要进行类型转换
		// 向上类型转换  自动类型转换  double num = 10;
		// Dog dog = new Dog();
		Pet pet1 = new Dog();
		// 向下类型转换 强制类型转换  int num = (int)10.1;
		
		// 为了增强转换的安全性 防止出现ClassCastException
		// instance实例   of ...的
		// pet是不是Dog类型的实例
		if(pet instanceof Dog) {
			Dog dog = (Dog)pet;
			dog.keepDoor();
		}else {
			Pig pig = (Pig)pet;
			pig.sleep();
		}
		
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值