Использование метода Same в интерфейсе и абстрактном классе - PullRequest
0 голосов
/ 04 сентября 2018

Я знаю, что на этот тип вопроса отвечали несколько раз, и он может быть помечен как дубликат

У меня есть такая структура

public interface service{

    public void sayHello();
}

public abstract class AbstractService{

    public void sayHello(){
        System.out.println("Hello!!");
    }
}

public class MyService extends AbstractService implements service{

    public void sayHello(){
        super.sayHello();
    }
}

Я знаю, что Java не разрешает множественное наследование, и мы используем интерфейсы, чтобы избежать неприятностей. Но с этой структурой я не могу найти выгоды / экономического обоснования того, почему мне нужно расширять и внедрять? Потому что у меня есть конкретный метод в моем абстрактном классе.

1 Ответ

0 голосов
/ 04 сентября 2018

Вспомните случай, когда у вас их много, скажем, 10 w.l.g, расширения AbstractService, и большинство из них (если не все) ведут себя одинаково в методе sayHello. Вам нужно будет реализовать этот метод в каждом классе, который реализует интерфейс, и в итоге вы получите много дублированного кода. Такой подход в Java 7 или более ранней версии спасает вас в таких случаях.

Почему я сказал Java 7 или старше? Итак, начиная с Java 8, интерфейсы имеют реализацию методов default, где вы можете фактически обеспечить реализацию метода по умолчанию, которую вы можете переопределить, когда вам нужно.

...