多态的优势和弊端

目录

多态的优势:

1. 在多态的形式下,右边对象可以实现解耦合,以便扩展和维护。

2. 定义方法使用父类作为参数,可以接受所有子类,体现多态的扩展性和便利性。

多态的弊端:

不能使用子类的特有功能

解决办法

转化注意点:

a. 转换的时候不能瞎转,如果转为其他类的类型,运行时idea会报错(输入时不会报错)

b. 为了保证转化正确可以先判断(instanceof关键字) 对象a 是否是 Dog 类 的实例,如果是,则向下转型

引用数据类型的类型转换,有几种方式?

强制转换能解决什么问题?


多态的优势:

1. 在多态的形式下,右边对象可以实现解耦合,以便扩展和维护。

如:

Person p=new Student();

p.work();

谈若工作计划发生变化,工作交由教师进行:

标蓝的代码可以换成new Teacher()即可

也就是优点是业务逻辑发生改变时,后续代码无需修改,只需改变右边对象即可。

2. 定义方法使用父类作为参数,可以接受所有子类,体现多态的扩展性和便利性。


在之前的学习的内容中我们也可以看到多态的优势;

如:

StringBuilder sb=new StringBuiler();

sb.append()可添加所有类型的数据(即Object)

再如:ArrayList<> 倘若没有ArrayList<> 倘若没有定义存储变量的类型,其add方法中可以直接add "object",而object是顶级父类,也就是可以添加所有类型的数据。定义存储变量的类型,其add方法中可以直接add "object",而object是顶级父类,也就是可以添加所有类型的数据。


多态的弊端

不能使用子类的特有功能

为什么?

如:

Person p=new Student();

根据多态中调用成员的特点(编译看左边,如果没有直接报错) 所有此时p只能调用父类Person中存在的变量或方法,不可调用子类中的新增的方法或变量。

如果我们要使用子类中的特有功能怎么办?

解决办法

将父类类型转回子类类型(向下转型)就可以了

如:

Animal a=new Dog();

Dog d=(Dog)a

此时就可以调用Dog类中的特有方法了

d.lookHome()

转化注意点:

a. 转换的时候不能瞎转,如果转为其他类的类型,运行时idea会报错(输入时不会报错)

如:

Animal a=new Dog();

Cat c=(Cat)a

此时会报错---Dog类 cannot be cast to Cat类


b. 为了保证转化正确可以先判断(instanceof关键字) 对象a 是否是 Dog 类 的实例,如果是,则向下转型

引用数据类型的类型转换,有几种方式?

自动类型转换(向上转型)

强制类型转换(向下转型)

强制转换能解决什么问题?

  • 可以转为真正的子类类型,从而调用子类的特有功能

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成果、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值