Java-多态性

多态是面向对象的一个主要特征,分为两个方面。

一、方法多态性:重载和覆写

  1. 重载:方法名相同,参数类型或个数不同,来完成不同的功能。
  2. 覆写:方法相同,操作的子类不同,完成的功能也不同。

二、对象多态性:父子类对象的转换

  1. 向上转型:子类对象变为父类对象。自动转换。
  2. 向下转型:父类对象变为子类对象。强制转换。
向上转型格式:父类 父类对象 = 子类实例
向下转型格式:子类 子类对象 = (子类) 父类实例

转型因素:

  1. 向上转型用的最多,80%。向上转型后所有的方法以父类方法为主,但具体的实现还是要看子类是否覆写。
  2. 向下转型10%,由于在向下转型操作之前,必须进行向上转型,来建立两个对象间的练习。若没有这种联系,是不可能发生向下转型,即产生“ClassCastException”。
  3. 不转型10%,转型会发生性能损耗,例如移动开发。

向下转型失败:使用instanceOf来判断一个对象是不是某个类的实例。 A对象 instanceOf B类,返回boolean值。

package com.joeaaa.demo07;

class A {
    public void print(){
        System.out.println("A, print()");
    }
}

class B extends A{
    public void print(){ // 方法覆写
        System.out.println("B,print()");
    }
}

public class PolymorphismTest1 {
    public static void main(String[] args) {
        /*
        * 向上转型 -> B,print()
        */
        A a1 = new B(); // 向上转型
        a1.print();
        System.out.println("-----------");

        /*
        * 向下转型 -> B,print()
         */
        A a2 = new B(); // 向上转型
        B b = (B) a2; // 向下转型
        b.print();
    }
}