java 多态 向上 向下转型

向上转型 将子类对象当作父类对象     子类对象------>父类对象

先实例化子类

父类 父类对象 = 子类实例

package test2;
class Father{
    public void fun1(){
        System.out.println("A---------fun 1");
        
    }
    public void fun2(){
        this.fun1();;
    }
}
class Sun extends Father{
    public void fun1(){
        System.out.println("B---------fun 1");
        
    }
    public void fun3(){
        System.out.println("B---------fun 3");
        
    }
}

public class PolDemo02 {
    public static void main(String args[]){
        Sun b = new Sun();           //实例化子类 b
        Father a= b;                 //父类 父类对象= 子类
        a.fun1();                    //父类对象调用是险
    }                                //发生了向上转型,则一定调用的是被子类覆写的对象,同时 此时的a对象是无法调用fun3()的因为
                                     //此方法只在子类中,所以要调用fun3(),肯定要实例化子类,所以,可以将对象向下转型。
}

向下转型

将父类对象当做子类对象           子类  子类对象  =  (子类)父类实例。

package test2;
class Father{
    public void fun1(){
        System.out.println("A---------fun 1");
        
    }
    public void fun2(){
        this.fun1();;
    }
}
class Sun extends Father{
    public void fun1(){
        System.out.println("B---------fun 1");
        
    }
    public void fun3(){
        System.out.println("B---------fun 3");
        
    }
}

public class PolDemo02 {
    public static void main(String args[]){
        Father a = new Sun();        //此时 先由new 一个子对象,然后由A a =  new b()发生向上转型,  子类--------> 父类
        Sun b =  (Sun)a;             //  子类    子类对象  =  (子类)父类对象     父类---------->子类 此时发生了向下转型关系
        b.fun1();                    //父类类型调用fun1()此时 调用的方法是发生覆写过的
        b.fun2();                    //调用父类方法
        b.fun3();                    //调用子类自己定义的方法
    }    
}

猜你喜欢

转载自www.cnblogs.com/ivan999/p/10513284.html