Java 简单java类多态性小🌰

package com.jasonote.classStudy;

/**
 * Created by Jasonote on 2017/11/26.
 * 多态性两种描述形式
 * 方法的多态性:
 * |- 方法的重载:同一个方法名称,会根据传入参数的类型及个数不同的
 * |- 方法的覆写:同一个方法,会根据子类的不同,实现不同的功能
 * 对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换
 * |- 向上转型(自动完成):父类 父类对象 = 子类实例;
 * |--- 意义:参数统一,可以调用子类覆写后的方法体,即:同一个方法针对于不同的子类可以有不同的实现
 * |- 向下转型(强制完成):子类 子类对象 = (子类)父类实例;
 * |--- 意义:父类要调用子类自己特殊的方法,所有的父类发生类向上转型后,只能够看到父类的方法,但看不到子类的方法
 *
 * 对于向下转型如果发生之前,一定要首先发生对象的向上转型,建立关系后才能向下转型
 *
 * 总结
 * |- 尽量使用向上转型,以头一参数类型,同时只发生了向上转型之后才能发生向下转型
 * |- 子类尽量不要多的扩充与父类无关的操作方法
 */
public class PolymorphicClass {
    public static void main(String[] args) {
        B bb = new B();
        bb.print();

        //向上转型
        A a = new B();
        a.print();

        //向下转型
        B b = (B) a;
        b.print();
        b.funB();

        //instanceof
        A A = new A();
        B B = new B();
        System.out.println(A instanceof B);
        System.out.println(B instanceof A);

        //
//        A aa = new A();
//        B bb2 = (B) aa;
//        bb2.print();//Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B

    }
}

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

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

    public void funB() {
        System.out.println("B funB");
    }
}

Jason.wang

When you find your talent can't afford to be ambitious, be quiet and study !

You may also like...