logo

Abstraktná trieda v Jave

Trieda, ktorá je deklarovaná pomocou kľúčového slova abstract, je známa ako abstraktná trieda v Java . Môže mať abstraktné a neabstraktné metódy (metóda s telom).

Predtým, ako sa naučíme abstraktnú triedu Java, najprv pochopme abstrakciu v Jave.

panel nástrojov rýchleho prístupu ms word

Abstrakcia v Jave

Abstrakcia je proces skrytia detailov implementácie a zobrazenie iba funkčnosti používateľovi.

Iným spôsobom zobrazuje používateľovi iba podstatné veci a skryje interné detaily, napríklad posielanie SMS, kde napíšete text a odošlete správu. Nepoznáte interné spracovanie o doručení správy.

Abstrakcia vám umožňuje zamerať sa na to, čo objekt robí namiesto toho, ako to robí.

Spôsoby, ako dosiahnuť abstrakciu

Existujú dva spôsoby, ako dosiahnuť abstrakciu v jazyku Java

  1. Abstraktná trieda (0 až 100 %)
  2. Rozhranie (100 %)

Abstraktná trieda v Jave

Trieda, ktorá je deklarovaná ako abstraktná, je známa ako an abstraktná trieda . Môže mať abstraktné a neabstraktné metódy. Je potrebné ho rozšíriť a implementovať jeho metódu. Nedá sa vytvoriť inštancia.

Body na zapamätanie

  • Abstraktná trieda musí byť deklarovaná s abstraktným kľúčovým slovom.
  • Môže mať abstraktné a neabstraktné metódy.
  • Nedá sa vytvoriť inštancia.
  • Môže mať konštruktérov a tiež statické metódy.
  • Môže mať konečné metódy, ktoré prinútia podtriedu nemeniť telo metódy.
Pravidlá pre abstraktnú triedu Java

Príklad abstraktnej triedy

 abstract class A{} 

Abstraktná metóda v Jave

Metóda, ktorá je deklarovaná ako abstraktná a nemá implementáciu, je známa ako abstraktná metóda.

Príklad abstraktnej metódy

 abstract void printStatus();//no method body and abstract 

Príklad abstraktnej triedy, ktorá má abstraktnú metódu

V tomto príklade je Bike abstraktná trieda, ktorá obsahuje iba jednu abstraktnú metódu. Jeho implementáciu zabezpečuje trieda Honda.

java má ďalšie
 abstract class Bike{ abstract void run(); } class Honda4 extends Bike{ void run(){System.out.println('running safely');} public static void main(String args[]){ Bike obj = new Honda4(); obj.run(); } } 
Vyskúšajte to
 running safely 

Pochopenie skutočného scenára abstraktnej triedy

V tomto príklade je Shape abstraktnou triedou a jej implementáciu zabezpečujú triedy Rectangle a Circle.

Väčšinou nevieme o implementačnej triede (ktorá je pre koncového používateľa skrytá) a objekt implementačnej triedy poskytuje továrenská metóda .

A továrenská metóda je metóda, ktorá vracia inštanciu triedy. O továrenskej metóde sa dozvieme neskôr.

V tomto príklade, ak vytvoríte inštanciu triedy Rectangle, bude vyvolaná metóda draw() triedy Rectangle.

Súbor: TestAbstraction1.java

 abstract class Shape{ abstract void draw(); } //In real scenario, implementation is provided by others i.e. unknown by end user class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle1 extends Shape{ void draw(){System.out.println('drawing circle');} } //In real scenario, method is called by programmer or user class TestAbstraction1{ public static void main(String args[]){ Shape s=new Circle1();//In a real scenario, object is provided through method, e.g., getShape() method s.draw(); } } 
Vyskúšajte to
 drawing circle 

Ďalší príklad abstraktnej triedy v jave

Súbor: TestBank.java

 abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 8;} } class TestBank{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); b=new PNB(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); }} 
Vyskúšajte to
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstraktná trieda s konštruktorom, dátovým členom a metódami

Abstraktná trieda môže mať dátový člen, abstraktnú metódu, telo metódy (neabstraktnú metódu), konštruktor a dokonca aj metódu main().

Súbor: TestAbstraction2.java

 //Example of an abstract class that has abstract and non-abstract methods abstract class Bike{ Bike(){System.out.println('bike is created');} abstract void run(); void changeGear(){System.out.println('gear changed');} } //Creating a Child class which inherits Abstract class class Honda extends Bike{ void run(){System.out.println('running safely..');} } //Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{ public static void main(String args[]){ Bike obj = new Honda(); obj.run(); obj.changeGear(); } } 
Vyskúšajte to
 bike is created running safely.. gear changed 

Pravidlo: Ak je v triede abstraktná metóda, táto trieda musí byť abstraktná.

 class Bike12{ abstract void run(); } 
Vyskúšajte to
 compile time error 

Pravidlo: Ak rozširujete abstraktnú triedu, ktorá má abstraktnú metódu, musíte buď poskytnúť implementáciu metódy, alebo urobiť túto triedu abstraktnou.


Ďalší skutočný scenár abstraktnej triedy

Abstraktná trieda môže byť tiež použitá na poskytnutie určitej implementácie rozhranie . V takom prípade nemusí byť koncový používateľ nútený prepísať všetky metódy rozhrania.

Poznámka: Ak ste začiatočník v jazyku Java, najprv sa naučte rozhranie a tento príklad preskočte.

 interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){System.out.println('I am c');} } class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }} 
Vyskúšajte to
 Output:I am a I am b I am c I am d