查找不重写方法的类

Mag*_*lex 5 java intellij-idea

IntelliJ IDEA 有没有办法搜索不重写某个方法的类?

假设我有这些课程:

public abstract class BaseClass {
  public void methodThatMightBeOverridden() {
  }
}

public class ConcreteClassWithOverriddenMethod extends BaseClass {
  @Override
  public void methodThatMightBeOverridden() {
    super.methodThatMightBeOverridden();
  }
}

public class ConcreteClassWithoutOverriddenMethod extends BaseClass {
}

public class AnotherConcreteClassWithoutOverriddenMethod extends ConcreteClassWithoutOverriddenMethod {
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在 IntelliJ 中找到所有BaseClass不覆盖的扩展methodThatMightBeOverridden()?请注意,我需要找到类,即使它们不直接实现BaseClass. 在上面的示例中,这将是ConcreteClassWithoutOverriddenMethodAnotherConcreteClassWithoutOverriddenMethod

我知道如何使用类型层次结构来查找方法被重写的类,但还没有找到相反的方法。

我尝试用谷歌搜索它但没有任何运气。另外,这是一个简化的示例。在实际代码中,我们有许多子类的实现,其中一些子类没有扩展该类。

Mag*_*lex 3

我找到了对此的支持。通过站在方法上并按Ctrl+ Shift+ H(或菜单中的“导航” -> “方法层次结构”),您可以清楚地看到所有重写方法:

方法层次结构

在这里,我将所有四个类放入一个名为Test如下的类中,因此类名称后面有“in Test”文本。该图非常不言自明,但减号意味着该类不会覆盖该方法。

package test;

public class Test {

  public abstract class BaseClass {
    public void methodThatMightBeOverridden() {
    }
  }

  public class ConcreteClassWithOverriddenMethod extends BaseClass {
    @Override
    public void methodThatMightBeOverridden() {
      super.methodThatMightBeOverridden();
    }
  }

  public class ConcreteClassWithoutOverriddenMethod extends BaseClass {
  }

  public class AnotherConcreteClassWithoutOverriddenMethod extends ConcreteClassWithoutOverriddenMethod {
  }

}
Run Code Online (Sandbox Code Playgroud)