1 多态(ploymorphism)指一个程序中相同的名字表示不同的含义的情况
1.1 编译时多态:函数重载(overload),多个同名的不同方法
e.g. p.sayhallo() p.sayhallo("wang")
1.2 运行时多态
- 覆盖(override):子类对父类方法的覆盖
- 动态绑定:---即虚方法调用
- 调用时程序会根据context自动正确的决定调用子类对象的方法
2 方法调用
注意:上溯造型(upcasting)----把派生类型当做基本类型处理
2.1 虚方法调用----可以实现运行时的多态
- 子类重载了父类的方法
- 运行时,系统根据调用该方法的实际类型来决定选择调用哪个方法
- 所有非final的方法调用时都会自动选择动态绑定(dynamic binding)
2.2 instanceOf
if(实例名 instanceOf 类型名)
public class DrawShape { public static void main(String[] arg){ Shape t = new Triangle(); Shape r = new Rectangle(); Shape q = new Quadrangle(); drawStuff(t); drawStuff(r); drawStuff(q); } static void drawStuff(Shape shape){ shape.draw(); } } class Shape{ public void draw(){ System.out.println("Draw a shape;"); }; } class Triangle extends Shape{ public void draw(){ System.out.println("Draw a triangle;"); } } class Rectangle extends Shape{ public void draw(){ System.out.println("Draw a Rectangle;"); } } class Quadrangle extends Shape{ public void draw(){ System.out.println("Draw a Quadrangle;"); } }
2.3 三种非虚方法调用
- static方法,以申明的类型为准,与实例无关
- private方法,子类看不见,也不会被虚化
- final方法,子类不能够覆盖,不存在虚化问题
时间: 2024-10-21 23:48:09