多态指,允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。说白了,就是调用同一个方法,可以根据调用者不同而产生不同的结果。也就是说,不同的对象调用同一个方法。
实现多态的技术是动态绑定,就是在运行的时候才知道哪个对象调用此方法。
多态三个条件,继承,重写,父类引用指向子类。
定义一个父类的时候,实例化子类(new 子类对象),调用某个方法(全是父类的方法),当这个方法被子类重写过后,则调用这个方法的时候,对象的状态变成子类,去调用子类的方法。
也就是说,多态的时候,优先执行父类的方法,只有父类的方法被重写过,才会执行子类的。
多态!!!!
多态和属性没有关系,Anmail a=new Cat();
a.age; 这里打印的是Anmail的属性
什么是多态?
就是一个对象开始在父类里面,最后又跑到子类里面去了。
向上转型:
父类 父类对象=子类实例
向下转型:需要强制转换
子类 子类对象=(子类)父类实例
多态分为:
编译时多态,重载 overloading
运行时多态:重写 overriding
运行时决定执行方法,jvm决定
多态实现原理?
多态在实现的时候会把子类和父类的方法都放在自己独有的方法表里面,如果子类没有重写父类的方法,那么子类程序入口指向父类方法表,调用父类方法。如果子类重写的父类方法,那么这个方法会保存在子类中,子类程序入口指向子类方法表。