Что такое абстрактный класс в Java?

  • Абстрактные классы похожи на любые другие нормальные классы в Java. Основное различие между абстрактным классом и обычным классом состоит в том, чтобы создать абстрактный класс, нам нужно использовать ключевое слово «ABSTARCT». Это разделение реализации класса.
  • Они использовали, чтобы определить очень общие черты своих подклассов. Такой тип класса называется абстрактным классом.
  • Самое главное, мы не можем создать объект абстрактного класса.
  • Абстрактные классы могут содержать как абстрактные, так и неабстрактные методы. Они не могут содержать тело абстрактного метода, которое может быть предоставлено только подклассом. Если подкласс не обеспечивает реализацию абстрактного метода, тогда мы должны сделать его РЕЗЮМЕ явно.
  • Другими словами, если класс содержит абстрактный метод, он должен определить себя как ABSTARCT.
  • Используя абстрактные классы, мы можем сгруппировать несколько классов Java вместе, это также оптимизирует код и делает код более читабельным и уменьшает избыточность. Он также предоставляет шаблон для будущих классов.

Синтаксис абстрактного класса в Java

Как работает абстрактный класс в Java?

  • Абстрактный класс имеет абстрактный метод и неабстрактный метод, т.е. абстрактный метод без тела, и они также могут иметь методы с реализацией.
  • Абстрактный класс используется для предоставления наиболее распространенной функции, специфичной для разных классов. Подклассы могут обеспечивать различную реализацию этих абстрактных методов в соответствии с их потребностями или требованиями.
  • Мы не можем создать объект абстрактного класса, используя оператор «new», но мы все же можем определить его конструктор, который может быть вызван только в конструкторе его подкласса. Конструктор подкласса может получить доступ к конструктору суперкласса, чтобы инициализировать его переменную, которая может использоваться в подклассе для дальнейшего требования.

Примеры абстрактного класса в Java

Human.java

package com.cont.article;
public abstract class Human
(
public abstract void whatTheylike();
public void doTheysleep()
(
System. out .println("Yes every human require sleep.");
)
)

Human1.java

package com.cont.article;
public class Human1 extends Human
(
@Override
public void whatTheylike()
(
System. out .println("we like to have icecream.");
)
)

Human2.java

package com.cont.article;
public class Human2 extends Human
(
@Override
public void whatTheylike()
(
System. out .println("we like to have coffee.");
)
)

TestHuman.java

package com.cont.article;
public class TestHuman
(
public static void main(String() args)
(
Human human1 = new Human1();
human1.whatTheylike();
Human human2 = new Human2();
human2.whatTheylike();
human1.doTheysleep();
human2.doTheysleep();
)
)

Выход:

В приведенном выше примере мы имеем HUMAN в качестве абстрактного класса, который определяет общие потребности, симпатии и антипатии человека. Существуют разные типы людей с разными симпатиями и антипатиями. Таким образом, каждый человек может обеспечить конкретную реализацию того, что ему нравится. Это будет только для них.

Основным преимуществом абстрактного класса является то, что у нас есть конкретная реализация методов в соответствии с требованием, что также приводит к снижению избыточности, повышает читаемость кода, скрывает реализацию методов и, следовательно, обеспечивает частичную абстракцию.

У нас может быть еще один пример, чтобы понять, когда нам следует использовать абстрактные классы.

  • Мы должны использовать абстрактный класс, когда мы хотим разделить общую функциональность между различными классами с определенной реализацией.
  • В абстрактных классах поля должны быть не статичными, а конечными, у нас также могут быть конкретные методы, определяемые как частные, публичные и защищенные.

Допустим, у нас есть один класс животных. На Земле есть разные виды животных, и все они в каком-то или главном смысле отличаются друг от друга. Он будет содержать все общие черты всех.

Теперь этот класс Animal не может иметь методы, специфичные для каждого животного. Таким образом, с помощью концепции класса Abstract мы можем реализовать эту функциональность без избыточного кода.

У всех животных разные звуки, привычки и т. Д. Например, собаки, кошки, слоны и закуски имеют разные звуки. Таким образом, для этого у нас может быть универсальный метод в родительском классе, с помощью которого все другие подклассы или дочерние классы могут предоставлять свои собственные конкретные реализации.

В родительском классе, т.е. Animal, у нас есть один общий абстрактный метод, называемый их Sound (). Таким образом, каждый дочерний класс должен переопределить этот метод и предоставить свою собственную конкретную реализацию.

Абстрактный класс и интерфейс?

  • Абстрактный класс и интерфейс используются для достижения абстракции в Java. Абстрактный класс обеспечивает частичную абстракцию, тогда как интерфейс обеспечивает 100% или полную абстракцию.
  • По умолчанию переменные в интерфейсе являются окончательными. Но абстрактный класс также содержит неконечную переменную. Точно так же абстрактный класс может иметь статическую, нестатическую переменную. Но интерфейс будет содержать только окончательную и статическую переменную.
  • Переменные-члены абстрактного класса могут быть как приватные, общедоступные, защищенные, но они по умолчанию общедоступны в случае интерфейса.
  • Абстрактный класс может расширять другой класс Java и реализовывать несколько интерфейсов, но один интерфейс может расширять только другой интерфейс. Абстрактный класс может обеспечить реализацию интерфейса, но интерфейс не может этого сделать.
  • Мы используем ключевые слова реализаций и расширений для реализации и расширения интерфейсов и классов соответственно.
  • С помощью метода мы можем изменять или получать доступ к нестатическим и неконечным переменным абстрактного класса.

Вывод

  • Абстрактный класс используется для обеспечения частичной абстракции. Абстрактный класс не может быть создан с использованием ключевого слова NEW.
  • Абстрактный метод не имеет тела и всегда заканчивается точкой с запятой (;).
  • Абстрактный класс содержит абстрактные и неабстрактные методы.
  • Подкласс абстрактного суперкласса, должен обеспечить реализацию всего абстрактного метода, если он не обеспечивает, тогда он должен объявить себя как абстрактный класс.
  • Подкласс может быть абстрактным, даже если суперкласс является конкретным.
  • Неабстрактный класс не может содержать абстрактные методы. Также абстрактный метод нестатичен.
  • Следовательно, мы можем сказать, что абстрактные классы также содержат абстрактные и конкретные методы, поэтому они не могут обеспечить 100% абстракцию. Это процесс сокрытия сложной логики от конечного пользователя и отображения им только сервисов. Подкласс может быть абстрактным, даже если его суперкласс является конкретным, и его также можно использовать как тип данных.
  • Абстрактный класс может иметь статические поля и статические методы. Вы можете использовать эти статические члены со ссылкой на класс.

Рекомендуемые статьи

Это руководство по абстрактному классу в Java. Здесь мы обсуждаем синтаксис и примеры абстрактного класса в Java вместе с абстрактным классом и интерфейсом. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Java интерфейс против абстрактного класса
  2. BoxLayout в Java
  3. Что такое Java SE?
  4. Что такое наследование Java?
  5. Как работает абстрактный класс в PHP?
  6. Абстрактный класс в C ++
  7. Руководство по статическому методу в PHP
  8. Полный обзор статического метода JavaScript