【Java】向上转型及向下转型

一.向上转型
天然发生(相当于认爹过程)
应用场景:参数统一化
语句:

父类  父类引用 = new 子类();
person per = new Student();
//子类一定可以变成父类 ,向上转型

例子:

class person{
        public void fun(){
            System.out.println("1.我是熊大!");
        }
}
class Student extends person{
    public void fun(){
        System.out.println("2.我是熊二");
    }
}
public class Test{
    public static void main(String[] args) {
    //向上转型
        person per = new Student();
        //当前方法是通过那个类new的,此方法也被子类所覆写,
        //调用的一定是被覆写后的方法.
        per.fun();
    }
}

最后输出:发生了向上转型

二.向下转型
向下转型需要强转,发生了向下转型之前一定首先发生向上转型
否则会抛出ClassCastException (运行时异常,类型转换异常,发生在两个毫无关系的类之间的强转时).
语句:

子类  子类引用 = (子类) 父类实例
//向下转型
Student stu = (Student) per;

引用对象 instanceof类

定义:表示该引用能否指向该类,返回true表示可以指向,返回false表示不能指向.

向下转型的标准格式如下:

if(!(per instanceof Student)){
     per = new Student();
}
Student stu = (Student) per;

例子:

public class Test{
    public static void main(String[] args) {
        Person per = new Person();
        //向下转型
        if(!(per instanceof Student)){
            per = new Student();
        }
        Student stu = (Student) per;
        stu.fun();
    }
    }

应用场景:发生在父类引用需要调用子类扩充的方法时,才发生向下转型变为子类引用调用其扩充方法.

无论是向上转型还是向下转型,本质在于发生了方法覆写.(多态的本质)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值