Java多态学习中的理解和应用

一、多态的概念

面向对象时,有三大特征:封装、继承和多态,而多态性就是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果。

(多态现实意义的理解:现实中也会出现事物的多种形态,比如张三既可以是学生,也可以是人,即出现两种形态。)

二、多态存在的前提:1.要有继承关系   

                                     2.要有方法覆盖      

                                     3.父类引用指向了子类的实例

三、多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可扩充性
  • 3. 可替换性
  • 4. 简化性
  • 5. 灵活性
  • 6. 接口性

四、这里主要讲讲多态的转型、重写

转型分为向上转型和向下转型

向上转型:

多态是如何实现向一个方法传入不同的类型得到不同的结果?这里是因为出现了叫上转型,即将子类对象地址赋值给父类引用,void getStudentService(PbStudent student)方法接收了不同的子类对象地址。

例子:

旧:
//创建vip学生类
zsStudentVip zsStudentVip = new zsStudentVip("101", "张三", "zsteach@163.com", LocalDate.now().plusDays(365));
//创建普通学生类
zsStudentGenaral pbStudentGenaral = new zsStudentGenaral("101", "张三", "zsteach@163.com");

新:
//创建Vip学生类
zsStudent studentVip = new zsStudentVip("101", "张三", "zsteach@163.com", LocalDate.now().plusDays(365));
//创建普通学生类
zsStudent studentGenaral = new zsStudentGenaral("101", "张三", "zsteach@163.com");

向下转型:

有向上转型自然有向下转型,如果想调用子类特有的方法必须向下转型,如下:

在PbStudentVip类中isValid()方法是它特有的,如果通过父类调用子类特有的方法是编译不通过的,因为父类没有子类特有的方法。

如果要调用子类的方法必须向下转型,即由父类型转为子类型。

例子:

zsStudent studentVip = new zsStudentVip("101", "张三", "zsteach@163.com", LocalDate.now().plusDays(365));
//将studentVip转为zsStudentVip类型
zsStudentVip zsStudentVip = (zsStudentVip) studentVip;
//调用vip学生类特有的方法
zsStudentVip.isValid();

注意:向下转型是非常危险的,要谨慎使用,如果转型的类型不对,它不会立刻报错,而是在调用的时候报错,所以一定要确定类型在进行转型。

简单来说,向上转型就是表示子类是父类的一种,比如学生是人。反过来,向下转型就是在确定向上转型也就是确定学生是人的情况下,反过来验证这个人是学生。

重写和重载:

覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。

重载是指不同的函bai数使用相同的函数名,但是函数的参du数个数或类型不同。调用的zhi时候根据函数的参数来区别不同的函数。

这里我主要要讲的是重写,重写是为了增强类的重用性和复用性,扩展性;重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西提高代码灵活性,容易修改。

子类继承了父类,子类的行为大多和父类相似,但子类具有他自己方式,这就是重写的意义。

所以在更多情况下,重写也要比重载更加适用。(如果想要知道具体情况可以在cnds上自己查询)

五、总结

多态包含了很多,更实在Java中有着很大的作用,由于我的学习还不够深入,我也只能在浅显的以及我多少懂了一点的方面进行一定的描述,其中的应用更是少的可怜,如有更多需要,各位可以自行查阅其他文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值