Абстрактен клас и метод на 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(); ) )

Изход

 Това е програмиране на Java

В горния пример създадохме абстрактен клас на име Language. Класът съдържа обикновен метод display().

Създадохме основния клас, който наследява абстрактния клас. Забележете изявлението,

 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(); ) )

Изход

 Кора от кора мога да ям.

В горния пример създадохме абстрактен клас Animal. Класът съдържа абстрактен метод makeSound()и не абстрактен метод eat().

Наследили сме подклас Куче от суперкласа Animal. Тук подкласът Dog осигурява изпълнението на абстрактния метод makeSound().

След това използвахме обекта d1 от клас Dog за извикване на методи makeSound()и eat().

Забележка : Ако класът Dog не осигурява изпълнението на абстрактния метод makeSound(), Dog също трябва да бъде деклариран като абстрактен. Това е така, защото подкласът Куче наследява makeSound()от Animal.

Достъп до конструктора на абстрактни класове

Абстрактният клас може да има конструктори като обикновения клас. И можем да получим достъп до конструктора на абстрактен клас от подкласа, използвайки superключовата дума. Например,

 abstract class Animal ( Animal() (… . ) ) class Dog extends Animal ( Dog() ( super();… ) )

Тук използвахме super()вътрешния конструктор на Dog за достъп до конструктора на Animal.

Обърнете внимание, че superвинаги трябва да е първият израз на конструктора на подклас. Посетете Java супер ключова дума, за да научите повече.

Абстракция на Java

Основното използване на абстрактни класове и методи е да се постигне абстракция в Java.

Абстракцията е важна концепция на обектно-ориентираното програмиране, която ни позволява да скрием ненужните подробности и да покажем само необходимата информация.

Това ни позволява да управляваме сложността, като пропускаме или скриваме детайли с по-проста идея от по-високо ниво.

Практичен пример за абстракция могат да бъдат мотоциклетни спирачки. Знаем какво прави спирачката. Когато натиснем спирачката, моторът ще спре. Работата на спирачката обаче е скрита от нас.

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

Нека вземем пример, който ни помага да разберем по-добре абстракцията на Java.

Пример 3: Java абстракция

 abstract class Animal ( abstract void makeSound(); ) class Dog extends Animal ( // implementation of abstract method public void makeSound() ( System.out.println("Bark bark."); ) ) class Cat extends Animal ( // implementation of abstract method public void makeSound() ( System.out.println("Meows "); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.makeSound(); Cat c1 = new Cat(); c1.makeSound(); ) )

Изход :

 Кора кора Meows

In the above example, we have created a superclass Animal. The superclass Animal has an abstract method makeSound().

The makeSound() method cannot be implemented inside Animal. It is because every animal makes different sounds. So, all the subclasses of Animal would have different implementation of makeSound().

So, the implementation of makeSound() in Animal is kept hidden.

Here, Dog makes its own implementation of makeSound() and Cat makes its own implementation of makeSound().

Note: We can also use interfaces to achieve abstraction in Java. To learn more, visit Java Interface.

Key Points to Remember

  • We use the abstract keyword to create abstract classes and methods.
  • An abstract method doesn't have any implementation (method body).
  • Клас, съдържащ абстрактни методи, също трябва да бъде абстрактен.
  • Не можем да създаваме обекти от абстрактния клас.
  • За да реализираме функции на абстрактния клас, ние наследяваме подкласове от него и създаваме обекти на подкласа.
  • Подкласът трябва да замени всички абстрактни методи на абстрактния клас. Ако обаче подкласът е обявен за абстрактен, не е задължително да се заменят абстрактните методи.
  • Можем да получим достъп до статичните атрибути и методи на абстрактния клас, като използваме препратката към абстрактния клас. Например,
     Animal.staticMethod();

Интересни статии...