java向上转型

创建父类(狗类)

public class Dog {
    public void play(){
        System.out.println("狗玩耍");
    }
    static void call(Dog dog){
        dog.play();
    }
}

创建狗类的子类(大黄狗)

public class DaHuang extends Dog {
    public static void main(String[] args) {
        DaHuang daHuang = new DaHuang();
        Dog.call(daHuang);
    }
    public void f1(){
    }
}

结果:
狗玩耍

现象:

对于父类的call方法,参数是Dog类型的,但是调用的时候输入的值是DaHuang类型的
在java编程中,编译器会对类型进行检查,如果参数类型是int型,那么输入的值肯定不能为String类型,
但是这次实验参数类型是Dog类型,输入的值是DaHuang类型,并且运行成功。

结论:
  1. 在编译器编译过程中,编译器会识别且认为DaHuang的对象也是一种Dog的对象,而且不会认为call方法是必须由Dog来调用,在call方法中,参数值可以对Dog和Dog的所有子类起作用,这种将DaHuang对象引用转换为Dog对象引用的动作称为“向上转型
  2. 在向上转型的过程中,即调用call方法的过程中,DaHuang对象的方法f1会丢失。
  3. 子类继承父类,继承父类所有方法,并且可以新增自己的方法,当向上转型时,子类除了保留继承父类的方法之外,其它新增的方法就会被编译器清除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值