You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java父类子类构造调用规则及@Override注解使用相关疑问

问题1 子类构造方法调用父类构造的规则

你的认知缺了Java的默认隐式调用规则:

  • 如果父类存在公开的无参构造方法,子类构造方法第一行如果没有显式写super()调用父类构造,也没有写this()调用自身其他构造方法,编译器会自动在子类构造的最开头插入一个无参的super()调用,不需要你手写。
  • 你这段代码里父类Vehicle已经明确定义了无参构造public Vehicle() { },所以两个子类的构造方法本质上都隐式调用了父类的无参构造,自然可以正常运行。
  • 只有当父类没有无参构造方法时(比如父类只定义了带参数的构造,没有手动写无参构造,此时编译器也不会自动生成默认无参构造),才要求子类必须在构造方法第一行显式调用父类的带参构造,传入对应参数,否则会编译报错。

问题2 @Override注解的作用

这个注解不是必须使用的,它是可选的编译校验注解,和参数是否一致没有“只有一致才需要用”的绑定关系:

  • 它的核心作用是告诉编译器:你当前定义的这个方法意图是重写父类/接口的方法,编译器会自动帮你校验是否符合重写的所有要求(方法名、参数列表的类型/个数/顺序、返回值类型符合规则,访问权限不低于父类方法)。
  • 你这段代码里Kawasaki的countWheels()完全符合重写要求,就算不加@Override也能正常实现重写效果,但加了注解之后,如果你后续不小心写错了方法名、参数列表,编译器会直接报错提醒,避免出现“你以为是重写实际是重载”的低级错误。
  • 如果你的方法本来就不是要重写父类方法,就不要加这个注解,否则编译器会直接报错。

内容的提问来源于stack exchange,提问作者apex2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:45:02