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

被折叠的 条评论
为什么被折叠?



