Java中的向上转型与向下转型

本文深入探讨了Java中类的继承关系中的向上转型与向下转型概念,通过具体实例展示了如何进行转型操作,并强调了使用 instanceof 运算符避免 ClassCastException 的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    Java中的类的继承关系中,有向上转型与向下转型两种。

   当父类的引用指向子类对象时,称为向上转型。比如Father是父类,Son是子类,则Father father=new Son()这种就是向上转型;这个时候执行的是指向的子类对象的方法。如下


public class Father {
    public void eat() {
        System.out.println("父类的吃方法");
    }
}
public class Son extends Father {
    public void eat() {
        System.out.println("子类的吃方法");
    }

    public static void main(String[] args) {
        Father father = new Son();//向上转型
        father.eat();
    }
}
输出
子类的吃方法

这个时候把子类对象赋给父类引用变量,这很自然,儿子总是要升任为父亲,这时候不需要强制类型转换。父类引用可以指向子类对象。可记成父亲可以指着儿子的鼻子教育。

        把父类的引用变量赋给子类引用时,称为向下转型。老爹要变成儿子,这个时候需要强制类型转换。比如上面的Son 与Father,如果Son son=(Son )father;这个就是向下转型。还有一种情况,比如Father father=new Father ();Son son=(Son )father;这种也是向下转型,但是因为子类引用不能指向父类对象,可记成儿子不可以指着父亲的鼻子教育,所以会报ClassCastException的错。还有,没有继承关系的两个类之间,也会报ClassCastException的错。比如Object obj=new Integer(2);Object是所有类的父类,实际的话执行的是Integer类的方法,现在是Integer类型,String s=(String)obj;这时把Integer类型强转成String类型,这时候就会报ClassCastException的错。在项目中,如果为了避免出现ClassCastException的情况,我们一般会先使用Instanceof 运算符来判断是否可以成功转换。这样可以使程序更加的健壮。


如上两个的例子,

public class Father {
    public void eat() {
        System.out.println("父类的吃方法");
    }
}

public class Son extends Father {
    public void eat() {
        System.out.println("子类的吃方法");
    }

    public static void main(String[] args) {
        Father father = new Father();//向下转型
        if (father instanceof Son) {
            Son son = (Son) father;
            son.eat();
        }
    }
}

Object obj = new Integer(2);
if (obj instanceof String) {
    String s = (String) obj;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值