向上(向下)转型的理解与应用

这篇博客介绍了Java中的向上转型和向下转型概念。向上转型是指父类引用指向子类对象,可以调用子类继承或覆盖的父类方法,但无法调用子类特有的方法。向下转型则是将父类引用转换为子类类型,需要强制类型转换,若转换不当会导致ClassCastException。博客通过宠物类(包括Dog和Penguin)的示例详细解释了如何使用这两种转型方式,并展示了如何利用instanceof运算符来避免错误的向下转型。
摘要由CSDN通过智能技术生成

58.向上(向下)转型

  • 向上转型:父类的引用指向子类对象,自动进行类型转换

<父类型><引用变量名>=new<子类型>()

通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法

通过父类引用变量无法调用子类特有的方法

  • 向下转型:将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换。

(使用向上转型无法调用子类独有的方法,可使用向下转型)

<子类型><引用变量名>=(<子类型>)<父类型的引用变量>;

在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

(向下转型,如果没有转化为真实的子类类型,此时会引发ClassCastException)

Java中提供了instanceof运算符来进行类型的判断减少在向下转型的过程中,没有转换为真实子类类型的类型转换异常(instanceof:进行类型判断,减少向下转型时的ClassCastException)

对象名 instanceof 类型

使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系

/*
* 宠物狗狗类Dog类
* */

public class Dog extends Pet{

    //品种
    private String strain="聪明的拉布拉多犬";


    public Dog(){
        System.out.println("子类狗狗的无参构造方法");
    }
    public Dog(String name,int health,int love){
        super(name,health,love);
        System.out.println("子类狗狗带三个参数的构造方法");
    }
    public Dog(String name,int health,int love,String strain){
        /*//通过super调用父类的构造方法,必须是第一行
        //super();注意参数顺序必须和父类一致
        super(name,health,love);*/
        this(name,health,love);
        this.strain=strain;
        System.out.println("子类狗狗的带四个参数的构造方法");
    }


    public String getStrain() {
        return this.strain;
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }

    public void print(){
        //调用父类的非private方法print()
        super.print();
        System.out.println(",我是一只:"+this.strain);
    }

    //宠物生病后看病
    public void toHospital(){
        System.out.println("打针、吃药");
        this.setHealth(60);
    }

    //狗狗吃骨头
    public void eat(){
        if (this.getHealth()>100){
            System.out.println("狗狗"+this.getName()+"吃饱了,不想吃了!");
        }else{
            //狗狗的健康值加3
            t

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值