多态初出现:
对于初学者来说,最开始接触到的java的多态代码可能是长这样的:
public class parent{
public void method1( parameter list ){
}
}
public class child extends parent{
//override
public void method1( parameter list ){
}
}
// test class
public class testDrive{
public static void main(String [] args){
parent p=new child();
p.method1();
}
}
多态机制的小结:
1. 子类继承父类
2.子类override父类的public函数
3.浅显理解java中的动态绑定。
tip:多态是针对函数才有意义,对instance variable讲多态没有意义;同时有static, private, final关键字的函数也是不适用多态的,因为它们的机制是静态绑定。
上述这个继承的例子,实际运行起来大概是这样的:
1. JVM看到p refer to的对象类型是child, 于是查找class child中所有的method;
2. 找到名字是method1,并且参数类型一致的那个函数,好啦就决定调用这个函数。
当然override之后的函数我个人认为优先级是高于父类的,就像书中所说的,the lowest wins! 所以最后会调用子类中重写后的method1.
tip: 定义为子类类型的reference variable是不能指向父类类型对象,这一点我还没想明白,先记住好啦。