Java继承

本文探讨了Java中的继承概念,如何通过继承减少代码重复并增强父类功能。通过Animal和Dog类的例子展示了父类型引用指向子类型对象的动态绑定过程。在编译阶段,静态绑定确保方法存在,而在运行时,动态绑定决定实际执行的方法,实现多态性。通过强制类型转换,可以访问子类特有的方法。文章深入解析了继承和多态在Java编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承

常用来解决的问题:

  1. 代码重复
  2. 加强父类

但这篇文章不讲怎么写继承,具体讲的什么我也不是很清楚
假设我创建了一个Animal的父类,又接着创建一个Dog的子类;

main方法这样创建一个名为a的Animal型的dog的对象
Animal a = new Dog();
//父类型引用指向子类型对象(其中也涉及“向下转型”)
在JVM的堆栈图如下:
在这里插入图片描述
只能在继承的条件下,才能使堆,栈类型不一样

编译过程

会进行静态绑定:
目的:确保其能运行。
以该例为例:
AnimalDog都写了一个eat()的方法,但在Dog中进行了重写(override)。在main中调用:a1.eat();在编译过程时会识别父类中是否存在eat()的方法,如果没有在编译过程就过不去。

那么发现子类中的特有的方法就无法执行:在创建的时候就进行了自动类型转换(向下/ 转型),牺牲了子类特有的方法;
当然有方法解决,只需在调用子类特殊方法前将a进行强制类型转换(向上转型)a = (Dog)a;,在这样操作后依旧能执行父类中特有的方法!

运行过程

会进行动态绑定:
a执行的方法取决于该方法有没有在子类中出现:
如果子类中有该方法就会执行子类中的方法会执行子类中的方法
如果子类中没有该方法就会执行父类的方法

多态:指一个方法有两种形态:在编译中时一种形态,在运行是另一种形态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值