Java предоставляет несколько способов обеспечения абстракции данных, таких как интерфейсы Java и абстрактные классы Java. И интерфейс, и абстрактный класс обеспечивают безопасность, скрывая детали внутренней реализации и показывая/выделяя только необходимые детали. Однако между абстрактными классами и интерфейсами существует множество сходств и различий.
Этот пост поможет вам в перечисленных ниже аспектах интерфейсов Java и абстрактных классов:
- Что такое интерфейс Java.
- Что такое абстрактный класс Java.
- Сравнение на основе сходства.
- Абстрактный класс Java против интерфейса Java.
Итак, начнем!
Что такое Java-интерфейс
Это шаблон для класса, который содержит некоторые абстрактные методы и статические/финальные переменные. В java интерфейсы предоставляют только объявление метода, а дочерние/реализованные классы предоставляют определение метода.
Что такое абстрактный класс Java
Любой класс Java, который имеет хотя бы один абстрактный (только объявление метода) метод, известен как абстрактный класс в Java.
Сравнение на основе сходства
Некоторые важные аспекты интерфейсов и абстрактных классов Java перечислены ниже:
- В java мы не можем создать объект/экземпляр обоих интерфейсов или абстрактных классов.
- Оба предоставляют пользователю только необходимые данные.
- Оба обеспечивают абстракцию.
- Оба могут иметь абстрактные методы/функции.
- Оба скрывают информацию/детали реализации от пользователей.
Абстрактный класс Java против интерфейса Java
Ключевые слова «abstract» и «interface» используются в java для создания/объявления абстрактных классов и интерфейсов соответственно.
В интерфейсах все члены по умолчанию считаются общедоступными, поэтому нет необходимости указывать модификатор доступа для членов интерфейсов. В то время как в абстрактных классах такого ограничения нет, и, следовательно, любой модификатор доступа может использоваться для членов абстрактных классов, таких как общедоступные, защищенные и т. д.
Основной синтаксис абстрактного класса и интерфейса показан в приведенных ниже фрагментах:
Абстрактный класс
public abstract class ClassName{ public abstract void methodName(); }
Интерфейс
public interface InterfaceName{ void methodName(); }
Интерфейсы должны иметь все абстрактные методы, а абстрактные классы могут иметь как абстрактные, так и неабстрактные методы.
Интерфейс может иметь только статические члены, тогда как абстрактные классы могут иметь статические и нестатические члены.
Интерфейсы имеют только «конечные» (неизменяемые) члены, в то время как абстрактные классы могут иметь конечные и неконечные члены.
Интерфейсы не имеют никакого конструктора, в то время как абстрактные классы имеют определяемые пользователем конструкторы или конструкторы по умолчанию.
Множественное наследование может быть достигнуто с помощью интерфейсов, в то время как абстрактные классы не поддерживают множественное наследование.
В Java абстрактный класс может наследовать другой класс и может реализовывать множество интерфейсов, с другой стороны, интерфейс Java может расширять только другой интерфейс.
Пример
Приведенный ниже пример позволит вам понять, как интерфейсы и абстрактные классы работают в java:
interface FirstInterface { void methodOne(); void methodTwo(); void methodThree(); } abstract class AbstractClass implements FirstInterface { public void methodThree() { System.out.println("Abstract class Implementing methodThree"); } } class NormalClass extends AbstractClass { public void methodOne() { System.out.println("Implementing methodOne"); } public void methodTwo() { System.out.println("Implementing methodTwo"); } public void methodThree() { System.out.println("Implementing methodThree"); } } public class InterfaceExample { public static void main(String[] args) { FirstInterface obj = new ClassThree(); obj.methodOne(); obj.methodTwo(); obj.methodThree(); } }
В этом примере мы создали интерфейс «FirstInterface» , абстрактный класс «AbstractClass» и еще два обычных класса Java и выполнили следующие функции:
- FirstInterface содержит три абстрактных метода.
- AbstractClass реализует FirstInterface и переопределяет methodThree ().
- NormalClass расширяет AbstractClass и переопределяет методы methodOne() и methodTwo() класса FirstInterface.
InterfaceExample — это основной класс, из которого мы создали основной метод и вызвали все методы FirstInterface :
Вывод подтвердил работу указанной выше Java-программы.
Вывод
В Java абстракция может быть достигнута с помощью абстрактных классов и интерфейсов, и оба они не могут быть созданы. Однако между абстрактными классами и интерфейсами существует множество различий. Например, интерфейсы должны иметь все абстрактные методы, а абстрактные классы могут иметь абстрактные и неабстрактные методы; используя интерфейсы, можно достичь множественного наследования, в то время как абстрактные классы не поддерживают множественное наследование и т. д. В этом посте объясняются различные аспекты абстрактных классов и интерфейсов с помощью подходящих примеров.