В обектно-ориентираното програмиране абстракцията се дефинира като скриване на ненужните детайли (имплементация) от потребителя и фокусиране върху съществени детайли (функционалност). Повишава ефективността и по този начин намалява сложността.
В Java абстракцията може да се постигне с помощта на абстрактни класове и методи. В този урок ще научим за абстрактните методи и тяхното използване в Java.
Абстрактен клас
Клас се декларира абстрактен с помощта на абстрактно ключова дума. Може да има нула или повече абстрактни и неабстрактни методи. Трябва да разширим абстрактния клас и да внедрим неговите методи. Не може да бъде инстанциран.
Синтаксис за абстрактен клас:
abstract class class_name { //abstract or non-abstract methods }
Забележка: Абстрактен клас може или не може да съдържа абстрактни методи.
Абстрактен метод
Метод, деклариран с помощта на абстрактно ключова дума в рамките на абстрактен клас и няма дефиниция (имплементация) се нарича абстрактен метод.
Когато се нуждаем само от декларация на метод в супер клас, това може да се постигне чрез деклариране на методите като абстракти.
Абстрактният метод се нарича още отговорност на подклас, тъй като няма имплементация в супер класа. Следователно подкласът трябва да го замени, за да предостави дефиницията на метода.
обработка на изключения в java
Синтаксис за абстрактен метод:
abstract return_type method_name( [ argument-list ] );
Тук абстрактният метод няма тяло на метода. Може да има нула или повече аргументи.
Точки за запомняне
Следните точки са важните правила за абстрактен метод в Java:
- Абстрактният метод няма тяло (имплементация), а само сигнатура на метода (декларация). Класът, който разширява абстрактния клас, имплементира абстрактните методи.
- Ако неабстрактен (конкретен) клас разширява абстрактен клас, тогава класът трябва да имплементира всички абстрактни методи на този абстрактен клас. Ако не, конкретният клас също трябва да бъде деклариран като абстрактен.
- Тъй като абстрактните методи имат само подпис, той трябва да има точка и запетая (;) в края.
- Следните са различни незаконни комбинации на други модификатори за методи по отношение на абстрактно модификатор:
- финал
- абстрактен роден
- абстрактно синхронизирано
- абстрактна статика
- абстрактно частно
- абстрактно strictfp
- Ако даден клас съдържа абстрактен метод, той трябва да бъде абстрактен и обратното не е вярно.
Пример за абстрактен метод в Java
Пример 1:
В следващия пример ще научим как се постига абстракция с помощта на абстрактни класове и абстрактни методи.
AbstractMethodEx1.java
// abstract class abstract class Multiply { // abstract methods // sub class must implement these methods public abstract int MultiplyTwo (int n1, int n2); public abstract int MultiplyThree (int n1, int n2, int n3); // regular method with body public void show() { System.out.println ('Method of abstract class Multiply'); } } // Regular class extends abstract class class AbstractMethodEx1 extends Multiply { // if the abstract methods are not implemented, compiler will give an error public int MultiplyTwo (int num1, int num2) { return num1 * num2; } public int MultiplyThree (int num1, int num2, int num3) { return num1 * num2 * num3; } // main method public static void main (String args[]) { Multiply obj = new AbstractMethodEx1(); System.out.println ('Multiplication of 2 numbers: ' + obj.MultiplyTwo (10, 50)); System.out.println ('Multiplication of 3 numbers: ' + obj.MultiplyThree (5, 8, 10)); obj.show(); } }
Изход:
Пример 2:
По подразбиране всички методи на интерфейса са публични и абстрактни. Един интерфейс не може да съдържа конкретни методи, т.е. обикновени методи с тяло.
AbstractMethodEx2.java
// interface interface SquareCube { // abstract methods public abstract int squareNum (int n); // it not necessary to add public and abstract keywords // as the methods in interface are public abstract by default int cubeNum (int n); // regular methods are not allowed in an interface // if we uncomment this method, compiler will give an error /*public void disp() { System.out.println ('I will give error if u uncomment me'); } */ } public class AbstractMethodEx2 implements SquareCube { // defining the abstract methods of interface public int squareNum (int num) { return num * num; } public int cubeNum (int num) { return num * num * num; } // main method public static void main(String args[]){ SquareCube obj = new AbstractMethodEx2(); System.out.println('Square of number is: ' + obj.squareNum (7) ); System.out.println('Cube of number is: ' + obj.cubeNum (7)); } }
Изход:
По този начин научихме за абстрактния метод и неговата реализация в Java.