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

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

参考文章:https://blog.csdn.net/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 子类();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值