java - 继承 - 调用什么方法?
问题描述
我有一个扩展了 B 类的 A 类。
A是这样定义的,它也覆盖了B的一个方法:
class A extends B
{
public A() {
super();
}
@Override
public void doSomething(){
//does something
}
}
B 定义如下:
public class B
{
public B(){
doSomething();
}
public void doSomething(){
//does something
}
}
因此,如果我初始化 A 的对象,构造函数会调用调用方法的超类之一doSomething()
。但是哪一个会被处决呢?B 的实现还是 A 中被覆盖的实现?
解决方案
这是一个常见的错误,只调用final
构造函数中的方法,方法 fromA
将被调用。
顺便说一句Sonar
(如果你有的话)会在这里触发一条规则,说你不应该在构造函数中调用多态方法。
推荐阅读
- c - 在 C 中的离线软件中查找文件位置
- spring-boot - 如何通过 ssh 进入 Kubernetes Pod
- vue.js - VueJS 使用 @click
- c# - 如何自定义 Fluent Assertions 错误消息
- scala - 如何离线或没有互联网安装 sbt
- r - 如何在 R 中的词嵌入中指定词
- php - Youtube 链接应在 PHP 网站的 youtube 应用程序中打开
- elasticsearch - Elasticsearch 7.4 集群内部的某些东西会随着读取超时而变得越来越慢
- python - 比较 2 个 csv 文件并使用 pandas 找出丢失、插入的数据和修改的数据
- c - Karatsuba 实施问题