首页 > 解决方案 > 继承 - 调用什么方法?

问题描述

我有一个扩展了 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 中被覆盖的实现?

标签: javainheritanceoverriding

解决方案


这是一个常见的错误,只调用final构造函数中的方法,方法 fromA将被调用。

顺便说一句Sonar(如果你有的话)会在这里触发一条规则,说你不应该在构造函数中调用多态方法。


推荐阅读