继承
常用来解决的问题:
- 代码重复
- 加强父类
但这篇文章不讲怎么写继承,具体讲的什么我也不是很清楚
假设我创建了一个Animal的父类,又接着创建一个Dog的子类;
在main方法这样创建一个名为a的Animal型的dog的对象
Animal a = new Dog();
//父类型引用指向子类型对象(其中也涉及“向下转型”)
在JVM的堆栈图如下:

只能在继承的条件下,才能使堆,栈类型不一样
编译过程
会进行静态绑定:
目的:确保其能运行。
以该例为例:
在Animal与Dog都写了一个eat()的方法,但在Dog中进行了重写(override)。在main中调用:a1.eat();在编译过程时会识别父类中是否存在eat()的方法,如果没有在编译过程就过不去。
那么发现子类中的特有的方法就无法执行:在创建的时候就进行了自动类型转换(向下/ 转型),牺牲了子类特有的方法;
当然有方法解决,只需在调用子类特殊方法前将a进行强制类型转换(向上转型)a = (Dog)a;,在这样操作后依旧能执行父类中特有的方法!
运行过程
会进行动态绑定:
a执行的方法取决于该方法有没有在子类中出现:
如果子类中有该方法就会执行子类中的方法会执行子类中的方法
如果子类中没有该方法就会执行父类的方法
本文探讨了Java中的继承概念,如何通过继承减少代码重复并增强父类功能。通过Animal和Dog类的例子展示了父类型引用指向子类型对象的动态绑定过程。在编译阶段,静态绑定确保方法存在,而在运行时,动态绑定决定实际执行的方法,实现多态性。通过强制类型转换,可以访问子类特有的方法。文章深入解析了继承和多态在Java编程中的应用。
12万+

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



