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
- Abstraktní třída (0 až 100 %)
- 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.
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