w-haiS 2020-07-12 11:29 采纳率: 64.3%
浏览 77
已采纳

关于Java中继承的问题

图片说明

为什么图中((Boat)v).move();这行代码执行的函数输出的语句和上面输出的语句是一样的,类型转换没起作用?代码写得没问题


public abstract class Vehicle  {
    protected int price;

    abstract void move();

    public Vehicle(int price) {
        this.price = price;
    }
}


public class Boat extends Vehicle {

    public Boat(int price) {
        super(price);
    }

    @Override
    void move() {
        System.out.println("Boat moved");
    }
}


public class Ship extends Boat {
    public Ship(int price) {
        super(price);
    }

    @Override
    void move() {
        System.out.println("Ship moved");
    }
}


  • 写回答

1条回答 默认 最新

  • CrazyDragon_King 2020-07-12 12:28
    关注

    调用父类的方法,会直接调用子类的实现。
    Vehicle v = new Ship(1200);
    v.move();
    它是调用 Ship 类的 move 方法。
    转成 Boat 后,Boat还是 Ship 的父类,调用父类的方法名,还是会调用子类的实现的。

    重写:能调用什么方法由左边引用类型决定,调用哪个方法由右边对象类型决定。一般是子类有就调用子类的,子类没有就沿着继承方向向上一层一层的找父类方法调用。这就是Java的多态机制。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 8月13日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)