- 向上转型:父类引用 引用 子类对象
- 运行时绑定:通过父类的引用 调用 父类和子类同名的方法,这种称为重写,也叫做覆盖/覆写
- 编译时绑定:通过函数的重载实现的,根据参数的个数和类型,在编译的时候就确定最终调用哪个方法。
-
方法名相同
-
参数列表相同(参数的个数+类型 相同)
-
返回值相同(返回值可以是协变类型)
协变类型是指:父类与子类保持相同形式的变化,注意:
1. static方法不能被重写
2. private修饰的方法、final修饰的方法,也不能被重写
3. 子类方法的访问权限要大于等于父类的访问权限,比如父类为protected,那子类就要是public
class Shape{ public void draw(){ System.out.println("shape::draw()"); } } //子类中每个draw方法不一样所以重写 class Rect extends Shape{ public void draw(){ System.out.println("◇"); } } class Flower extends Shape{ public void draw(){ System.out.println("❀"); } } public class Test { public static void drawMap(Shape shape){ shape.draw(); } public static void main(String[] args) { //打印圆形 Rect rect = new Rect(); drawMap(rect); //打印花 Flower flower = new Flower(); drawMap(flower); } }
在drawMap()方法中,父类的不同子类引用调用draw(),实现不同的效果。
- 打印○图案时,调用 drawMap()方法,此时调用draw方法就是实现打印圆形的效果
- 打印❀图案时,调用 drawMap()方法,此时调用draw方法就是实现打印花朵的效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)