V objektovo orientovanom programovaní je abstrakcia definovaná ako skrytie nepotrebných detailov (implementácia) pred používateľom a zameranie sa na podstatné detaily (funkčnosť). Zvyšuje účinnosť a tým znižuje zložitosť.
V Jave možno abstrakciu dosiahnuť pomocou abstraktné triedy a metódy. V tomto návode sa dozvieme o abstraktných metódach a ich použití v Jave.
Abstraktná trieda
Trieda je deklarovaná ako abstraktná pomocou abstraktné kľúčové slovo. Môže mať nula alebo viac abstraktných a neabstraktných metód. Potrebujeme rozšíriť abstraktnú triedu a implementovať jej metódy. Nedá sa vytvoriť inštancia.
Syntax pre abstraktnú triedu:
abstract class class_name { //abstract or non-abstract methods }
Poznámka: Abstraktná trieda môže alebo nemusí obsahovať abstraktné metódy.
Abstraktná metóda
Metóda deklarovaná pomocou abstraktné kľúčové slovo v rámci abstraktnej triedy a nemá definíciu (implementáciu) sa nazýva abstraktná metóda.
Keď potrebujeme len deklaráciu metódy v supertriede, dá sa to dosiahnuť deklarovaním metód ako abstraktov.
Abstraktná metóda sa tiež nazýva zodpovednosť podtriedy, pretože nemá implementáciu v supertriede. Preto ju musí podtrieda prepísať, aby poskytla definíciu metódy.
Syntax pre abstraktnú metódu:
abstract return_type method_name( [ argument-list ] );
Abstraktná metóda tu nemá telo metódy. Môže mať nula alebo viac argumentov.
Body na zapamätanie
Nasledujúce body sú dôležité pravidlá pre abstraktnú metódu v Jave:
- Abstraktná metóda nemá telo (implementáciu), má len podpis metódy (deklaráciu). Trieda, ktorá rozširuje abstraktnú triedu, implementuje abstraktné metódy.
- Ak neabstraktná (konkrétna) trieda rozširuje abstraktnú triedu, potom trieda musí implementovať všetky abstraktné metódy tejto abstraktnej triedy. Ak nie, konkrétna trieda musí byť tiež deklarovaná ako abstraktná.
- Keďže abstraktné metódy majú iba podpis, musí mať na konci bodkočiarku (;).
- Nasledujúce sú rôzne nedovolené kombinácie iných modifikátorov pre metódy s ohľadom na abstraktné modifikátor:
- Konečný
- abstraktný rodák
- abstraktné synchronizované
- abstraktné statické
- abstraktné súkromné
- abstraktné strictfp
- Ak trieda obsahuje abstraktnú metódu, musí byť abstraktná a naopak to neplatí.
Príklad abstraktnej metódy v Jave
Príklad 1:
V nasledujúcom príklade sa dozvieme, ako sa abstrakcia dosahuje pomocou abstraktných tried a abstraktných metód.
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(); } }
Výkon:
Príklad 2:
Štandardne sú všetky metódy rozhrania verejné a abstraktné. Rozhranie nemôže obsahovať konkrétne metódy, t. j. bežné metódy s telom.
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)); } }
Výkon:
Týmto spôsobom sme sa dozvedeli o abstraktnej metóde a jej implementácii v Jave.