logo

Abstraktní třída v Javě

Třída, která je deklarována pomocí klíčového slova abstract, je známá jako abstraktní třída v Jáva . Může mít abstraktní a neabstraktní metody (metoda s tělem).

Než se naučíme abstraktní třídu Java, nejprve porozumíme abstrakci v Javě.

java objektová rovnost

Abstrakce v Javě

Abstrakce je proces skrytí detailů implementace a zobrazení pouze funkčnosti uživateli.

Jiným způsobem zobrazuje uživateli pouze podstatné věci a skrývá vnitřní detaily, například odesílání SMS, kde napíšete text a odešlete zprávu. Neznáte interní zpracování o doručení zprávy.

Abstrakce vám umožní soustředit se na to, co objekt dělá místo toho, jak to dělá.

Způsoby, jak dosáhnout abstrakce

Existují dva způsoby, jak dosáhnout abstrakce v jazyce Java

  1. Abstraktní třída (0 až 100 %)
  2. Rozhraní (100 %)

Abstraktní třída v Javě

Třída, která je deklarována jako abstraktní, se nazývá an abstraktní třída . Může mít abstraktní a neabstraktní metody. Je třeba ji rozšířit a implementovat její metodu. Nelze vytvořit instanci.

Body k zapamatování

  • Abstraktní třída musí být deklarována pomocí abstraktního klíčového slova.
  • Může mít abstraktní a neabstraktní metody.
  • Nelze vytvořit instanci.
  • Může mít konstruktéři a také statické metody.
  • Může mít konečné metody, které přinutí podtřídu neměnit tělo metody.
Pravidla pro abstraktní třídu Java

Příklad abstraktní třídy

 abstract class A{} 

Abstraktní metoda v Javě

Metoda, která je deklarována jako abstraktní a nemá implementaci, je známá jako abstraktní metoda.

Příklad abstraktní metody

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

Příklad třídy Abstract, která má abstraktní metodu

V tomto příkladu je Bike abstraktní třída, která obsahuje pouze jeden běh abstraktní metody. Jeho implementaci zajišťuje třída Honda.

 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(); } } 
Otestujte to hned
 running safely 

Pochopení skutečného scénáře abstraktní třídy

V tomto příkladu je Shape abstraktní třídou a její implementaci zajišťují třídy Rectangle a Circle.

Většinou nevíme o implementační třídě (která je koncovému uživateli skryta) a objekt implementační třídy poskytuje tovární metoda .

A tovární metoda je metoda, která vrací instanci třídy. O tovární metodě se dozvíme později.

Pokud v tomto příkladu vytvoříte instanci třídy Rectangle, bude vyvolána metoda draw() třídy Rectangle.

Soubor: 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(); } } 
Otestujte to hned
 drawing circle 

Další příklad abstraktní třídy v jazyce Java

Soubor: 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()+' %'); }} 
Otestujte to hned
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstraktní třída s konstruktorem, datovým členem a metodami

Abstraktní třída může mít datový člen, abstraktní metodu, tělo metody (neabstraktní metodu), konstruktor a dokonce i metodu main().

Soubor: 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(); } } 
Otestujte to hned
 bike is created running safely.. gear changed 

Pravidlo: Pokud je ve třídě abstraktní metoda, musí být tato třída abstraktní.

 class Bike12{ abstract void run(); } 
Otestujte to hned
 compile time error 

Pravidlo: Pokud rozšiřujete abstraktní třídu, která má abstraktní metodu, musíte buď poskytnout implementaci metody, nebo tuto třídu učinit abstraktní.


Další skutečný scénář abstraktní třídy

Abstraktní třída může být také použita k poskytnutí určité implementace rozhraní . V takovém případě nemusí být koncový uživatel nucen přepsat všechny metody rozhraní.

Verilog vždy

Poznámka: Pokud jste začátečník s javou, naučte se nejprve rozhraní a tento příklad přeskoč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(); }} 
Otestujte to hned
 Output:I am a I am b I am c I am d