Java三大特性之多态

概念:对于同一个指令(调用同一个名称的方法),不同的方法给予不同的反应(不同的方法实现)

  例如:老师给学生上课,当老师说下课时,不同的学生有不同的反应,有的学生上厕所、有的学生喝水,但老师下发的指令只有一个

  这就是多态,同一指令,不同的事物有不同的反应

规范(多态实现的前提):

  1.必须要有继承关系

  2.子类方法必须重写父类方法

  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 }

如上代码可以体现出

  当子类中没有重写父类中现有的方法时,多态调用的是父类中的方法

  当子类中重写了父类中的方法时,多态调用的是子类中的方法

多态的目的:

  为了提高代码的扩展性和维护性

  方便代码逻辑的编写

多态的两种表现形式:

  1.父类作为方法的参数

  2.父类作为方法的返回值类型

引用类型的转换与基本类型的转换类似:

父类转成子类时要进行强制转换,但在强制转化前一定要先判断父类引用指向的子类对象到底是谁,若无法确定,在运行过程中可能出错

子类转成父类时,直接自动转换,不需要进行任何的判断

原文地址:https://www.cnblogs.com/lyc-code/p/12494806.html