У објектно оријентисаном програмирању, апстракција се дефинише као скривање непотребних детаља (имплементација) од корисника и фокусирање на битне детаље (функционалност). Повећава ефикасност и тиме смањује сложеност.
У Јави, апстракција се може постићи коришћењем апстрактне класе и методе. У овом водичу ћемо научити о апстрактним методама и њиховој употреби у Јави.
Апстрактна класа
Класа се проглашава апстрактном помоћу апстрактан кључна реч. Може имати нула или више апстрактних и неапстрактних метода. Морамо да проширимо апстрактну класу и применимо њене методе. Не може се инстанцирати.
Синтакса за апстрактну класу:
abstract class class_name { //abstract or non-abstract methods }
Напомена: Апстрактна класа може или не мора да садржи апстрактне методе.
Абстрацт Метход
Метода декларисана коришћењем апстрактан кључна реч унутар апстрактне класе и нема дефиницију (имплементацију) назива се апстрактна метода.
Када нам је потребна само декларација метода у супер класи, то се може постићи декларисањем метода као апстрактних.
Апстрактни метод се такође назива одговорност подкласе јер нема имплементацију у супер класи. Према томе, поткласа мора да је надјача да би обезбедила дефиницију методе.
Синтакса за апстрактни метод:
abstract return_type method_name( [ argument-list ] );
Овде, апстрактна метода нема тело методе. Може имати нула или више аргумената.
Тачке које треба запамтити
Следеће тачке су важна правила за апстрактну методу у Јави:
- Апстрактни методи немају тело (имплементацију), они само имају потпис (декларацију) методе. Класа која проширује апстрактну класу имплементира апстрактне методе.
- Ако неапстрактна (конкретна) класа проширује апстрактну класу, онда класа мора имплементирати све апстрактне методе те апстрактне класе. Ако није, конкретна класа се такође мора декларисати као апстрактна.
- Пошто апстрактне методе имају само потпис, на крају треба да има тачку и зарез (;).
- Следе разне недозвољене комбинације других модификатора за методе у погледу апстрактан модификатор:
- коначни
- апстрактно нативе
- апстрактно синхронизовано
- апстрактна статичност
- апстрактно приватно
- апстрактно стрицтфп
- Ако класа садржи апстрактну методу, она мора бити апстрактна и обрнуто није тачно.
Пример апстрактног метода у Јави
Пример 1:
У следећем примеру ћемо научити како се апстракција постиже коришћењем апстрактних класа и апстрактних метода.
АбстрацтМетходЕк1.јава
// 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:
Подразумевано, све методе интерфејса су јавне и апстрактне. Интерфејс не може да садржи конкретне методе, тј. регуларне методе са телом.
АбстрацтМетходЕк2.јава
// 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)); } }
Излаз:
На овај начин смо научили о апстрактној методи и њеној имплементацији у Јави.