Что такое абстрактный класс в 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 вместе с абстрактным классом и интерфейсом. Вы также можете посмотреть следующие статьи, чтобы узнать больше -
- Java интерфейс против абстрактного класса
- BoxLayout в Java
- Что такое Java SE?
- Что такое наследование Java?
- Как работает абстрактный класс в PHP?
- Абстрактный класс в C ++
- Руководство по статическому методу в PHP
- Полный обзор статического метода JavaScript