概念:对于同一个指令(调用同一个名称的方法),不一样的方法给予不一样的反应(不一样的方法实现)spa
例如:老师给学生上课,当老师说下课时,不一样的学生有不一样的反应,有的学生上厕所、有的学生喝水,但老师下发的指令只有一个code
这就是多态,同一指令,不一样的事物有不一样的反应对象
规范(多态实现的前提):blog
1.必需要有继承关系继承
2.子类方法必须重写父类方法class
3.父类引用指向子类对象(同一引用类型,使用不一样的实例而执行不一样的操做)扩展
1 public class DuoTai { 2 public static void main(String[] args) { 3 //父类引用指向子类对象 4 Father father = new Child(); 5 /** 6 * 因为fun1在子类中没有方法重写,当调用fun1时只会调用父类中的fun1 7 * 子类中重写了fun2,当执行到父类中fun1中的fun2时,就会执行子类中重写的fun2 8 */ 9 father.fun1();//执行结果为子类中的fun2 10 } 11 } 12 13 class Father{ 14 public void fun1(){ 15 fun2(); 16 } 17 18 public void fun2(){ 19 System.out.println("父类中的fun2"); 20 } 21 } 22 23 class Child extends Father{ 24 //方法重载 25 public void fun1(int i){ 26 System.out.println("子类中的fun1"); 27 } 28 //方法重写 29 public void fun2(){ 30 System.out.println("子类中的fun2"); 31 } 32 }
如上代码能够体现出引用
当子类中没有重写父类中现有的方法时,多态调用的是父类中的方法方法
当子类中重写了父类中的方法时,多态调用的是子类中的方法static
多态的目的:
为了提升代码的扩展性和维护性
方便代码逻辑的编写
多态的两种表现形式:
1.父类做为方法的参数
2.父类做为方法的返回值类型
引用类型的转换与基本类型的转换相似:
父类转成子类时要进行强制转换,但在强制转化前必定要先判断父类引用指向的子类对象究竟是谁,若没法肯定,在运行过程当中可能出错
子类转成父类时,直接自动转换,不须要进行任何的判断