Абстрактный класс Java и абстрактные методы
Абстрактный класс Java и абстрактные методы
В этом уроке мы узнаем об абстрактных классах и методах Java с помощью примеров. Мы также узнаем об абстракции в Java.
Абстрактный класс Java
Абстрактный класс в Java не может быть создан (мы не можем создавать объекты абстрактных классов). Мы используем abstract
ключевое слово для объявления абстрактного класса. Например,
// create an abstract class
abstract class Language {
// fields and methods
}
...
// try to create an object Language
// throws an error
Language obj = new Language();
Абстрактный класс может иметь как обычные методы, так и абстрактные методы. Например,
abstract class Language {
// abstract method
abstract void method1();
// regular method
void method2() {
System.out.println("This is regular method");
}
}
Чтобы узнать о неабстрактных методах, посетите методы Java. Здесь мы узнаем об абстрактных методах.
<час>Абстрактный метод Java
Метод, не имеющий своего тела, называется абстрактным методом. Мы используем тот же abstract
ключевое слово для создания абстрактных методов. Например,
abstract void display();
Здесь display()
является абстрактным методом. Тело display()
заменяется на ;
.
Если класс содержит абстрактный метод, то класс должен быть объявлен абстрактным. В противном случае будет выдана ошибка. Например,
// error
// class should be abstract
class Language {
// abstract method
abstract void method1();
}
<час> Пример:абстрактный класс и метод Java
Хотя абстрактные классы не могут быть созданы, мы можем создавать из них подклассы. Затем мы можем получить доступ к членам абстрактного класса, используя объект подкласса. Например,
abstract class Language {
// method of abstract class
public void display() {
System.out.println("This is Java Programming");
}
}
class Main extends Language {
public static void main(String[] args) {
// create an object of Main
Main obj = new Main();
// access method of abstract class
// using object of Main class
obj.display();
}
}
Вывод
This is Java programming
В приведенном выше примере мы создали абстрактный класс с именем Language. . Класс содержит обычный метод display()
.
Мы создали класс Main, который наследует абстрактный класс. Обратите внимание на заявление,
obj.display();
Здесь obj является объектом дочернего класса Main . Мы вызываем метод абстрактного класса, используя объект obj .
<час>Реализация абстрактных методов
Если абстрактный класс включает какой-либо абстрактный метод, то все дочерние классы, унаследованные от абстрактного суперкласса, должны обеспечивать реализацию абстрактного метода. Например,
abstract class Animal {
abstract void makeSound();
public void eat() {
System.out.println("I can eat.");
}
}
class Dog extends Animal {
// provide implementation of abstract method
public void makeSound() {
System.out.println("Bark bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of Dog class
Dog d1 = new Dog();
d1.makeSound();
d1.eat();
}
}
Вывод
Bark bark I can eat.
В приведенном выше примере мы создали абстрактный класс Animal. . Класс содержит абстрактный метод makeSound()
и неабстрактный метод eat()
.
Мы унаследовали подкласс Dog из суперкласса Animal . Здесь подкласс Dog обеспечивает реализацию абстрактного метода makeSound()
.
Затем мы использовали объект d1 Собаки класс для вызова методов makeSound()
и eat()
.
Примечание :Если Собака класс не обеспечивает реализацию абстрактного метода makeSound()
, Собака также должен быть объявлен как абстрактный. Это связано с тем, что подкласс Dog наследует makeSound()
из Животное .
Доступ к конструктору абстрактных классов
Абстрактный класс может иметь конструкторы, подобные обычному классу. И мы можем получить доступ к конструктору абстрактного класса из подкласса, используя super
ключевое слово. Например,
abstract class Animal {
Animal() {
….
}
}
class Dog extends Animal {
Dog() {
super();
...
}
}
Здесь мы использовали super()
внутри конструктора Dog для доступа к конструктору Animal .
Обратите внимание, что super
всегда должен быть первым оператором конструктора подкласса. Посетите суперключевое слово Java, чтобы узнать больше.
Абстракция Java
В основном абстрактные классы и методы используются для достижения абстракции в Java.
Абстракция — важная концепция объектно-ориентированного программирования, позволяющая скрыть ненужные детали и показать только необходимую информацию.
Это позволяет нам управлять сложностью, опуская или скрывая детали с более простой идеей более высокого уровня.
Практическим примером абстракции могут быть тормоза мотоцикла. Мы знаем, что делает тормоз. Когда мы нажимаем на тормоз, мотоцикл останавливается. Однако работа тормоза скрыта от нас.
Основным преимуществом сокрытия работы тормоза является то, что теперь производитель может реализовать тормоз по-разному для разных мотоциклов, однако то, что делает тормоз, будет одинаковым.
Давайте рассмотрим пример, который поможет нам лучше понять абстракцию Java.
Пример 3. Абстракция Java
abstract class MotorBike {
abstract void brake();
}
class SportsBike extends MotorBike {
// implementation of abstract method
public void brake() {
System.out.println("SportsBike Brake");
}
}
class MountainBike extends MotorBike {
// implementation of abstract method
public void brake() {
System.out.println("MountainBike Brake");
}
}
class Main {
public static void main(String[] args) {
MountainBike m1 = new MountainBike();
m1.brake();
SportsBike s1 = new SportsBike();
s1.brake();
}
}
Вывод :
MountainBike Brake SportsBike Brake
В приведенном выше примере мы создали абстрактный суперкласс MotorBike. . Суперкласс MotorBike имеет абстрактный метод brake()
.
brake()
метод не может быть реализован внутри MotorBike . Это потому, что каждый велосипед имеет различную реализацию тормозов. Итак, все подклассы MotorBike будет иметь другую реализацию brake()
.
Итак, реализация brake()
в Мотоцикл скрыто.
Вот, Горный велосипед делает собственную реализацию brake()
и Спортбайк делает собственную реализацию brake()
.
Примечание :мы также можем использовать интерфейсы для достижения абстракции в Java. Чтобы узнать больше, посетите интерфейс Java.
<час>Ключевые моменты, которые следует помнить
- Мы используем
abstract
ключевое слово для создания абстрактных классов и методов. - У абстрактного метода нет реализации (тела метода).
- Класс, содержащий абстрактные методы, также должен быть абстрактным.
- Мы не можем создавать объекты абстрактного класса.
- Для реализации функций абстрактного класса мы наследуем от него подклассы и создаем объекты подкласса.
- Подкласс должен переопределять все абстрактные методы абстрактного класса. Однако если подкласс объявлен абстрактным, не обязательно переопределять абстрактные методы.
- Мы можем получить доступ к статическим атрибутам и методам абстрактного класса, используя ссылку абстрактного класса. Например,
Animal.staticMethod();
java