[Java] 关于向上转型 向下转型

[Java] 关于向上转型 向下转型

向上转型: 子类转父类 (麻雀是鸟)
向上转型的作用,减少重复代码,父类为参数,调用时用子类作为参数,就是利用了向上转型。

向下转型:需要强制转换 if(a2 instanceof B) 不安全

A类:

package a.b;
public class A {
    void aMthod() {
       System.out.println("A method");
    }
}

A的子类B:

package a.b;
public class B extends A {
    void bMethod1() {
       System.out.println("B method 1");
    }

    void bMethod2() {
       System.out.println("B method 2");
    }
}

C类:

package a.b;
public class C {
     public static void main(String[] args) {
            A a1 = new B(); // 向上转型
            a1.aMthod();    // 调用父类aMthod(),a1遗失B类方法bMethod1()、bMethod2()
            B b1 = (B) a1; // 向下转型,编译无错误,运行时无错误
            b1.aMthod();    // 调用父类A方法
            b1.bMethod1(); // 调用B类方法
            b1.bMethod2(); // 调用B类方法
            A a2 = new A();
            B b2 = (B) a2; // 向下转型,编译无错误,运行时将出错
            b2.aMthod();
            b2.bMethod1();
            b2.bMethod2();
     }
}

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值