В Java есть ли какое-либо существенное различие между абстрактным методом абстрактного класса и абстрактным методом интерфейса, за исключением их прав доступа? Пожалуйста, просветите меня. Я использую Java7.Разница между абстрактным методом абстрактного класса и абстрактным методом интерфейса в java
ответ
Технически Нет разницы между методами или их подписи - между abstract
классом и interface
. Но использование методов делает разницу.
public class Son extends AbstractChild , Father{//Cannot do as multiple inheritance not supported
}
public class Son extends AbstractChild implements Naughtiness, Cuteness{//Allowed}
В соответствии с JLS, методы интерфейсной являются public
и abstract
и, как вы упомянули модификатор доступа для интерфейса по умолчанию для public
.
Однако с Java 8 интерфейс является игровым сменщиком. Интерфейс будет иметь одинаковую силу абстрактных классов, где вы можете иметь стандартную реализацию метода.
Для получения дополнительной информации см - http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
С одной стороны, у вас есть некоторые технические отличия:
- методы интерфейса неявным
public abstract
- Интерфейсы могут использовать
extends
несколько раз - Абстрактный класс может содержать некоторые реализованные функции (интерфейсы могут иметь его только в JDK 8+)
В разработчиков практике использовать их для реализации немного разные функциональные возможности:
- Абстрактные классы используются в основном в верхней части наследования деревьев (предположим, что классы Animal, Cat расширяет животных, собак распространяется животное). Животные могут иметь некоторые функциональные возможности, которые являются общими для всех животных (например, getName())
- Интерфейсы просто отмечают поведение. (Раздражающий интерфейс, Москитные инструменты Раздражающие, Telemarketer реализует Annoyable). Телемаркетинг и москит имеют метод
annoy()
.
Абстрактный метод не содержит реализации по умолчанию и полагается на класс реализации. Абстрактный метод заканчивается на; и не использует {}, потому что метод не может содержать реализацию. Его подкласс должен обеспечивать реализацию. Абстрактный класс может иметь абстрактные и не абстрактные методы. цель абстрактного класса - скрыть внутренние детали и показать только реализацию пользователю.
- 1. Создание интерфейса с абстрактным методом
- 2. Наследование Java с абстрактным методом
- 3. Использование обобщений абстрактным методом
- 4. абстрактные базовые классы python, разница между mixin и абстрактным методом
- 5. В чем разница между общедоступным методом и абстрактным методом в интерфейсе?
- 6. Делегировать прямо или косвенно (абстрактным методом)?
- 7. Как узнать, какой класс называется абстрактным методом?
- 8. вызов частной переменной с абстрактным методом переопределения
- 9. Переопределение метода интерфейса по умолчанию с абстрактным методом
- 10. Разница между абстрактным классом и интерфейсом?
- 11. Динамический возвращаемый тип реализации, объявленный абстрактным методом
- 12. Java advanced Enum с абстрактным методом и используется для ветвления
- 13. Странное поведение с абстрактным методом TypeScript
- 14. Symfony/SonataUser - Ошибка с абстрактным методом BaseUser
- 15. В чем разница между абстрактным классом и интерфейсом?
- 16. Разница между открытым интерфейсом и абстрактным интерфейсом?
- 17. В чем разница между нестатическим методом и статическим методом абстрактного класса?
- 18. В чем разница между абстрактным и интерфейсом в контексте C++?
- 19. Разница между чистым абстрактным классом и интерфейсом
- 20. В чем разница между методом Java и родным методом?
- 21. Разница между методом StringUtils и методом String
- 22. Разница между методом класса, методом экземпляра, переменной экземпляра, переменной класса?
- 23. В чем разница между абстрактным и виртуальным?
- 24. Разница между методом object.equals и == в java
- 25. C# Как установить общий тип с абстрактным методом
- 26. Разница между методами абстрактного и методами не абстрактного в C#?
- 27. Расширение абстрактного обобщенного класса с абстрактным классом в Java
- 28. В чем разница между абстрактным классом и интерфейсом?
- 29. разница между абстрактным классом и Trait
- 30. Разница между классом и абстрактным типом данных
Да. Но вам нужно рассказать нам, какую версию Java вам интересует. –
Я не думаю, что интерфейсы имеют «абстрактные» методы для каждого пользователя, но простые имеют контрактное требование, выполнение которых должно соответствовать. Все методы, объявленные интерфейсом, должны быть общедоступными. У вас не может быть абстрактного метода без абстрактного класса – MadProgrammer
@MadProgrammer Из [JLS] (https://docs.oracle.com/javase/specs/jls/se6/html/interfaces.html#9.4): " Каждое объявление метода в теле интерфейса неявно «абстрактно» – Andreas