Animal b = new Dog(); 向上转型的理解

本文介绍了Java中的向上转型概念,通过实例展示了如何使用向上转型实现方法复用。Animal为父类,Dog为子类,代码演示了Animal对象可以接收Dog实例,但Dog对象不能接收Animal实例。向上转型允许将子类对象赋值给父类引用,从而可以在不修改方法签名的情况下调用共性方法。然而,这会导致子类特有的方法无法直接调用。总结来说,向上转型主要用来实现多态,但会牺牲子类的特有功能。

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

Animal b = new Dog(); 向上转型的理解

参考文章:https://blog.youkuaiyun.com/zhangfan1913775361/article/details/95178806

为什么要用向上转型?因为为了让方法复用,只写一个以父类为形参的方法即可。但是会丢失子类的特有方法

核心就是下面代码-------看完就能理解

在下面的代码中

  • Animal为父类,存在move方法
  • Dog为子类,存在move,bark方法
  • Animal animal=new Animal(); ok
  • Dog dog=new Dog(); ok
  • Animal dog=new Dog(); ok
  • Dog animal=new Animal(); 错误
  • 我的大概理解就是:子类是父类的属性,方法的更加完善版本,所以new 子类可以拿父类来接收
class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}
 
class Dog extends Animal {
    @Override
    public void move() {
        System.out.println("狗可以跑和走");
    }
    public void bark() {
        System.out.println("狗可以吠叫");
    }
}
 
class TestDog {
//  形参类型只写一种Animal即可,如果没有向上转型,要写Dog,Fish,Cat等多种形参,那就累死了。
    public static void doEat(Animal h) {
        h.move();
    }
    public static void main(String args[]) {
        Animal a = new Animal(); // Animal 对象
// 下一行就是向上转型,需要Animal,给个Dog,也行吧,但是不能执行Dog类的特有方法了。
        Animal b = new Dog(); 
// 下一行需要Dog,给它Animal,肯定不行,编译出错!
//        Dog d =new Animal();  
        Dog c = new Dog();
        a.move();// 执行 Animal 类的方法
        b.move();//执行 Dog 类的方法
//        b.bark()  该方法使用失败
        c.bark();
//下两行体现了向上转型的精髓,假如没有向上转型,面对不同的实参,形参要写很多种,那样该方法要写多少个呀!!!!
        doEat(new Dog()); //狗可以跑和走
        doEat(new Animal()); //动物可以移动
    }
}

结论:向上转型,是子类继承父类,并创建对象的过程。语法为“父类 对象名 = new 子类构造器”,如 父 对象 = new 子类();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值