为什么子类可以重写某个方法,但在Java中仍然可以通过super调用父类的实现?
我正在学习Java的继承与方法覆盖。
我明白子类可以覆盖父类中的方法,但我还没有完全理解为什么仍然可以通过 super 调用到父类的版本。
示例:
class Vehiculo {
public void mostrarTipo() {
System.out.println("Soy un vehículo");
}
}
class Motocicleta extends Vehiculo {
@Override
public void mostrarTipo() {
super.mostrarTipo();
System.out.println("Soy una motocicleta");
}
}
然后:
Motocicleta moto = new Motocicleta();
moto.mostrarTipo();
我的问题是:
如果子类中的方法覆盖了父类的方法,为什么 super.mostrarTipo() 仍然有效?
Java会在内存中同时保留这两个版本的方法吗?方法覆盖在内部是如何工作的?
解决方案
它不仅可行,而且在任何面向对象语言中都是一个常见的用例。想象一下:
- 你有一个包含若干属性的类,并实现了一个相当复杂的方法
- 在某个特殊场景下,你需要一个额外的属性,并且在使用上述方法时这个属性需要被修改
确实有意义在子类中覆盖该方法,并让覆盖后的方法先调用父类的方法,然后再实现对额外属性的处理。
举个例子,可以设想一个处理工时、工资、税务等的员工类,还有一个销售人员类,在一个月的销售额基础上获得额外的收入……
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。