多态(polymorphism)
多态的概念
- 多态是指一个程序中相同的名字表示不同的含义的情况。
- 多态有两种情形:
- 编译时多态:
- 重载(overload)多个同名的不同方法
- 如:
p.sayHello(); p.sayHello("wang");
- 运行时多态:
- 覆盖(override)子类对父类方法进行覆盖
- 动态绑定(dynamic binding)—-也成为虚方法调用(virtual method invoking),真正的方法在运行时才确定。
- 在调用方法时,程序会正确地调用子类对象的方法。
- 多态的特点大大提高了程序的抽象程度和简洁性。
上溯造型(upcasting)
Person p = new Student();
void fun(Person p){
...}
fun(new Person()); or fun(new Student());
虚方法 (virtual methods)
虚方法调用
- 虚方法调用,可以实现运行时的多态
- 子类重载了父类的方法时,运行时系统根据调用该方法的实例的类型来决定选择哪一个方法调用。
- 所有的非final方法都会自动地进行动态绑定。
public class TestVirtualInvoke{
static void doStuff(Shape s){
s.draw();
}
public static void main(String[] args) {
Shape s = new Shape();