java【多态】

目录

一:概念

二:分类

静态多态(早绑定)

动态多态(晚绑定)

三:实现多态条件

四:重写

重写和重载的区别

五:向上转型和向下转型

向上转型:

 向下转型:


一:概念


同一件事情,发生在不同对象身上,就会产生不同的结果。

举例子:动物吃东西,狗吃肉,猫吃鱼

二:分类


静态多态(早绑定)

在程序编译阶段,已经确定了方法的具体行为,即:已经确定了具体要调用哪个方法------典型代码:方法重载 

动态多态(晚绑定)

三:实现多态条件


1. 必须在继承体系下

2. 子类必须要对父类中想要实现多态的方法进行重写(crtl + o)

3. 通过父类的引用调用重写的方法多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法

在程序执行时,通过基类引用不同类的对象,就会调用对应类中被重写的方法

注意:子类对象可以看成是一个基类对象,狗是动物,猫也是动物

结论:基类引用可以引用子类对象

四:重写


将基类方法原型拷贝一份到子类中,然后在子类中重新来实现

  1. 重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
  2. 可以在子类重写的方法之前加@Overide来检测是否重写成功
  3. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
  4. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
  5. 被重写的方法访问权限可以不同,访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected。
  6. public >default>protected>private

重写和重载的区别

方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

区别点重载(override)重写(override)
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
访问限定符可以修改一定不能做更严格的限制
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
方法定义范围没有一个方法必须在基类,另一个方法必须在子类
方法限制没有限制构造,private,final,static修饰的都不能被重写

五:向上转型和向下转型


向上转型:

实际就是创建一个子类对象,将其当成父类对象来使用。

向上转型一定是安全的,因为是从小范围到大范围的转换。

可以说狗是动物,猫是动物,但是动物就不一定是狗或者猫了。

语法格式:父类类型 对象名 = new 子类类型()

 向下转型:

 向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。

 如果想访问到子类独有的方法该怎么办?------强转(不推荐)

基类:Animal类(别的之前eat()方法等没展示,重点展示测试)

 子类:Cat类

 测试:

但是这样是很不安全的:

语法没问题,但是运行时报错了:

解决方法: Java中为了提高向下转型的安全性,引入 了 instanceof ,如果该表达式为true,则可以安全转换。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值