转型 面向对象

转型

转型:
基本数据类型的类型转换 == 引用类型的类型提升

向上转型 : 自动类型提升
​ 从小到大->从子类到父类
​ 父类类型 引用 = new 子类类型();
​ long l = 1;
向下转型 : 强制类型转换
​ 从大到小 ->从父类到子类
​ 小范围类型 变量 = (小范围类型)大范围类型的数据;
​ int i = (int)l;

向下转型可能遇到类型转换异常ClassCastException:
引用 instanceof 类型
判断前面的引用是否指向后面类型的对象,或者是否指向后面类型子类的对象,如果是返回true,不是返回false

注意:
多态引用不能调用子类中独有的方法,对子类新增功能不可见
如果想要调用子类的独有方法,需要向下转型
如果向下转型想要保证不出现类型转换异常,可以使用instanceof进行提前判断

public class CastDemo01 {
    public static void main(String[] args) {
        //向上转型-->化妆
        KongZiDie die = new KongZiBrother();
        die.teach();

        //转型之前的判断: 为了预防类型转换异常的出现
        if(die instanceof KongZiBrother){
            //向下转型->卸妆
            KongZiBrother zi = (KongZiBrother)die;
            //KongZiBrother zi = new KongZi();
            zi.play();
            zi.teach();
        }else{
            KongZi zi = (KongZi)die;
            zi.play();
            zi.teach();
        }

        System.out.println(die instanceof KongZi);  //false
        System.out.println(die instanceof KongZiBrother); //true
        System.out.println(die instanceof KongZiDie);  //true

    }

}

//父类
class KongZiDie{
    String name = "kongzidie";

    void teach(){
        System.out.println("敲代码...");
    }
}
//子类
class KongZi extends KongZiDie{
    String name = "kongzi";

    void teach(){
        System.out.println("论语...");
    }

    void play(){
        System.out.println("LoL...");
    }
}

class KongZiBrother extends KongZiDie{
    String name = "KongZiBrother";

    void teach(){
        System.out.println("圣经");
    }

    void play(){
        System.out.println("绝地求生!!!...");
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值