多态定义:

  某一类事物的多种存在形态。

  同一个行为具有多个不同表现形式或形态的能力。

  多态就是同一个接口,使用不同的实例而执行不同操作,如下图:

  

java python 和 多态 java多态的好处与弊端_父类

 多态的好处:

  1.消除类型之间的耦合关系

  2.可替换性

  3.可扩充性

  4.接口性

  5.灵活性

  6.简化性

  最重要的一点就是,使程序有良好的扩展,并可以对所有类的对象进行通用处理。

 多态的弊端:

  前期定义的内容不能使用(调用)后期子类的特有内容。

多态的前提:

  1.必须有继承关系;

  2.要有方法重写;

  3.要有父类引用指向子类对象。

Parent p = new Child()

注意:

  当使用多态方式调用方法时,首先检查父类中是否有该方法。

  如果没有,即编译错误;如果有,再去调用子类的同名方法。

其实,多态的最终目的就是调用子类中重写后的同名方法

 多态的特点:

  成员变量:

只看引用变量所属的类。

    编译时:参考引用型变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败;

    运行时:;

(简单说:编译和运行都看等号的左边)

  构造方法:

    创造子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。

(简单说:编译和运行都看左边)

  成员方法:

    编译时:参考引用型变量所属的类中是否有调用的成员方法,有,编译通过,没有,编译失败;

    运行时:因为子类的方法对父类的方法进行了重写,所以运行结果为右边子类的方法;

(简单说:编译看左边,运行看右边)

  静态方法:

  举例:

1 class A{
 2     public void show(){
 3         show2();
 4     }
 5     public void show2(){
 6         System.out.println("I");
 7     }
 8 }
 9 class B extends A{
10     public void show2(){
11         System.out.println("love");
12     }
13 }
14 class C extends B{
15     public void show(){
16         super.show();
17     }
18     public void show2(){
19         System.out.println("you");
20     }
21 }
22 public class DuoTaiTest3{
23     public static void main(String[] args){
24         A a = new B();
25         a.show();
      //编译看左边:对象a所在的类A中有show()方法,所以编译通过
      //运行看右边:类B中没有show()方法,所以继承父类A的show()方法,调用show2()方法
26         
27         B b = new C();
28         b.show();
      //编译看左边:对象b所在的类B中没有show()方法,但会继承其父类A的show()方法,所以编译通过
      //运行看右边:类C中有show()方法,是调用父类B的show()方法,而父类B是继承A的show()方法,所以还是调用show2()方法
29     }
30 }

 

多态的转型:

  比如上面实例中的:A a = new B();

  这就是向上转型,将B类型自动向上提升成了A类型,但是无法访问A类型自有的特有功能。(作用就是限制访问特有功能)

  再比如:B b = (B)a;

  这就是向下转型,将A类型向下转成了B类型,使之具有B类型的特有功能,可以调用B类的成员方法。

  注:对于转型,自始自终都是子类对象在做着类型的变化。

  

昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否知否,应是绿肥红瘦!