Eclipse не предлагает методы суперкласса в рефакторинге «Extract Interface».И это правильно, потому что вы действительно не должны реализовывать интерфейс и реализовывать методы в суперклассе!
Вы хотите что-то вроде этого:
public interface InterfaceForB {
void b();
void a();
}
public class A {
public void a(){}
}
public class B extends A implements InterfaceForB{
public void b(){}
}
Да, он компилируется.Но это ужасный стиль, потому что он говорит, что B
реализует интерфейс, что просто не соответствует действительности, потому что метод a()
реализован в классе A
.
Мой сильныйсовет: используйте рефакторинги, предлагаемые IntelliJ, извлекайте только методы для интерфейса, которые действительно реализованы реальным классом.Реализуйте B
для данного примера, чтобы он реализовал все методы интерфейса:
public class B extends A implements InterfaceForB{
public void b(){}
public void a(){ super(); }
}
И теперь IntelliJ (и eclipse) могут извлекать интерфейс так, как вы этого хотите.