(1) И абстрактные классы, и интерфейсы могут иметь абстрактные методы.
(2) Интерфейсы могут иметь только константы, но не переменные, тогда как абстрактные классы могут иметь как константы, так и переменные.
(3) Абстрактные классы также могут иметь неабстрактные методы, а интерфейсы — нет.
При разработке программы на основе конкретного анализа следует определить, следует ли использовать абстрактные классы или интерфейсы . Помимо предоставления важных абстрактных методов, которые должны быть переопределены подклассами, абстрактные классы также предоставляют переменные и неабстрактные методы, которые могут наследовать подклассы.
Если определенную проблему необходимо лучше решить с помощью наследования, например: помимо переопределения абстрактного метода родительского класса, подкласс также должен наследовать некоторые переменные или наследовать некоторые важные неабстрактные методы от родительского класса, вы можете рассмотрите возможность использования абстрактного вида. Если определенная проблема не требует наследования, а требует только нескольких классов для предоставления деталей реализации некоторых важных абстрактных методов, вы можете рассмотреть возможность использования интерфейсов.
Примечание . Интерфейс JDK1.8 поддерживает статические методы и методы по умолчанию.
1) Интерфейсы нельзя использовать для создания экземпляров объектов.
2) Интерфейс не имеет метода-конструктора.
3) Все методы интерфейса должны быть абстрактными.
4) Интерфейсы не могут содержать переменные-члены, за исключением статических и финальных переменных.
5) Интерфейс не наследуется классом, а реализуется классом.
6) Интерфейс поддерживает множественное наследование.
Метод по умолчанию означает, что интерфейс может иметь методы реализации и не нуждается в классе реализации для реализации своих методов. Вам нужно только добавить ключевое слово по умолчанию перед именем метода, чтобы реализовать метод по умолчанию. Методы по умолчанию предоставляют возможность расширить интерфейс, не нарушая существующий код.
(1) Интерфейс может иметь несколько методов по умолчанию и статических методов.
(2) Метод по умолчанию вызывается через экземпляр, а статический метод вызывается через имя интерфейса.
(3) Ключевое слово по умолчанию можно использовать только в интерфейсах.
(4) Методы по умолчанию могут быть унаследованы. Если вы наследуете несколько интерфейсов и несколько интерфейсов определяют несколько одинаковых методов по умолчанию, класс реализации должен переопределить методы по умолчанию, в противном случае будет сообщено об ошибке.
(5) Статические методы не могут быть унаследованы и переопределены, поэтому их можно вызывать только из определенного интерфейса.
Примечание . После JDK 1.9 методы можно определять как частные, поэтому некоторые повторно используемые коды не будут раскрывать эти методы.