2015-09-07 2 views
1

В Java есть ли какое-либо существенное различие между абстрактным методом абстрактного класса и абстрактным методом интерфейса, за исключением их прав доступа? Пожалуйста, просветите меня. Я использую Java7.Разница между абстрактным методом абстрактного класса и абстрактным методом интерфейса в java

+0

Да. Но вам нужно рассказать нам, какую версию Java вам интересует. –

+0

Я не думаю, что интерфейсы имеют «абстрактные» методы для каждого пользователя, но простые имеют контрактное требование, выполнение которых должно соответствовать. Все методы, объявленные интерфейсом, должны быть общедоступными. У вас не может быть абстрактного метода без абстрактного класса – MadProgrammer

+3

@MadProgrammer Из [JLS] (https://docs.oracle.com/javase/specs/jls/se6/html/interfaces.html#9.4): " Каждое объявление метода в теле интерфейса неявно «абстрактно» – Andreas

ответ

0

Технически Нет разницы между методами или их подписи - между 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

0

С одной стороны, у вас есть некоторые технические отличия:

  • методы интерфейса неявным public abstract
  • Интерфейсы могут использовать extends несколько раз
  • Абстрактный класс может содержать некоторые реализованные функции (интерфейсы могут иметь его только в JDK 8+)

В разработчиков практике использовать их для реализации немного разные функциональные возможности:

  • Абстрактные классы используются в основном в верхней части наследования деревьев (предположим, что классы Animal, Cat расширяет животных, собак распространяется животное). Животные могут иметь некоторые функциональные возможности, которые являются общими для всех животных (например, getName())
  • Интерфейсы просто отмечают поведение. (Раздражающий интерфейс, Москитные инструменты Раздражающие, Telemarketer реализует Annoyable). Телемаркетинг и москит имеют метод annoy().
0

Абстрактный метод не содержит реализации по умолчанию и полагается на класс реализации. Абстрактный метод заканчивается на; и не использует {}, потому что метод не может содержать реализацию. Его подкласс должен обеспечивать реализацию. Абстрактный класс может иметь абстрактные и не абстрактные методы. цель абстрактного класса - скрыть внутренние детали и показать только реализацию пользователю.

Смежные вопросы