继承
常用来解决的问题:
- 代码重复
- 加强父类
但这篇文章不讲怎么写继承,具体讲的什么我也不是很清楚
假设我创建了一个Animal
的父类,又接着创建一个Dog
的子类;
在main
方法这样创建一个名为a的Animal
型的dog
的对象
Animal a = new Dog();
//父类型引用指向子类型对象(其中也涉及“向下转型”)
在JVM的堆栈图如下:
只能在继承的条件下,才能使堆,栈类型不一样
编译过程
会进行静态绑定:
目的:确保其能运行。
以该例为例:
在Animal
与Dog
都写了一个eat()
的方法,但在Dog
中进行了重写(override)。在main
中调用:a1.eat();
在编译过程时会识别父类中是否存在eat()
的方法,如果没有在编译过程就过不去。
运行过程
会进行动态绑定:
a
执行的方法取决于该方法有没有在子类中出现:
如果子类中有该方法就会执行子类中的方法会执行子类中的方法
如果子类中没有该方法就会执行父类的方法