logo

Abstrakte Klasse in Java

Eine Klasse, die mit dem Schlüsselwort abstract deklariert wird, wird in als abstrakte Klasse bezeichnet Java . Es kann abstrakte und nicht-abstrakte Methoden (Methode mit Körper) haben.

Bevor wir die abstrakte Java-Klasse lernen, wollen wir zunächst die Abstraktion in Java verstehen.

spitzer Winkel

Abstraktion in Java

Abstraktion ist ein Prozess, bei dem die Implementierungsdetails ausgeblendet und dem Benutzer nur die Funktionalität angezeigt wird.

Auf andere Weise werden dem Benutzer nur wesentliche Dinge angezeigt und die internen Details ausgeblendet, z. B. beim Senden einer SMS, bei der Sie den Text eingeben und die Nachricht senden. Sie kennen die interne Verarbeitung der Nachrichtenzustellung nicht.

Durch Abstraktion können Sie sich auf das konzentrieren, was das ist Objekt tut, statt wie es es tut.

Wege zur Abstraktion

Es gibt zwei Möglichkeiten, in Java eine Abstraktion zu erreichen

  1. Abstrakte Klasse (0 bis 100 %)
  2. Schnittstelle (100 %)

Abstrakte Klasse in Java

Eine als abstrakt deklarierte Klasse wird als an bezeichnet abstrakte Klasse . Es kann abstrakte und nicht abstrakte Methoden haben. Es muss erweitert und seine Methode implementiert werden. Es kann nicht instanziiert werden.

Punkte, die man sich merken sollte

  • Eine abstrakte Klasse muss mit einem abstrakten Schlüsselwort deklariert werden.
  • Es kann abstrakte und nicht abstrakte Methoden haben.
  • Es kann nicht instanziiert werden.
  • Es kann sein Konstrukteure und auch statische Methoden.
  • Sie kann finale Methoden haben, die die Unterklasse dazu zwingen, den Hauptteil der Methode nicht zu ändern.
Regeln für die Java Abstract-Klasse

Beispiel einer abstrakten Klasse

 abstract class A{} 

Abstrakte Methode in Java

Eine Methode, die als abstrakt deklariert ist und keine Implementierung hat, wird als abstrakte Methode bezeichnet.

Beispiel einer abstrakten Methode

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

Beispiel einer abstrakten Klasse, die über eine abstrakte Methode verfügt

In diesem Beispiel ist Bike eine abstrakte Klasse, die nur eine abstrakte Methodenausführung enthält. Die Implementierung erfolgt durch die Honda-Klasse.

 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(); } } 
Testen Sie es jetzt
 running safely 

Das reale Szenario des Abstraktunterrichts verstehen

In diesem Beispiel ist Shape die abstrakte Klasse und ihre Implementierung wird durch die Klassen „Rectangle“ und „Circle“ bereitgestellt.

schwebendes CSS

Meistens wissen wir nichts über die Implementierungsklasse (die dem Endbenutzer verborgen bleibt), und ein Objekt der Implementierungsklasse wird von bereitgestellt Fabrikmethode .

A Fabrikmethode ist eine Methode, die die Instanz der Klasse zurückgibt. Wir werden später etwas über die Factory-Methode erfahren.

Wenn Sie in diesem Beispiel die Instanz der Klasse „Rechteck“ erstellen, wird die Methode draw() der Klasse „Rechteck“ aufgerufen.

Datei: 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(); } } 
Testen Sie es jetzt
 drawing circle 

Ein weiteres Beispiel einer Abstract-Klasse in Java

Datei: 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()+' %'); }} 
Testen Sie es jetzt
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstrakte Klasse mit Konstruktor, Datenelement und Methoden

Eine abstrakte Klasse kann ein Datenelement, eine abstrakte Methode, einen Methodenkörper (nicht abstrakte Methode), einen Konstruktor und sogar die Methode main() haben.

Datei: 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(); } } 
Testen Sie es jetzt
 bike is created running safely.. gear changed 

Regel: Wenn es in einer Klasse eine abstrakte Methode gibt, muss diese Klasse abstrakt sein.

 class Bike12{ abstract void run(); } 
Testen Sie es jetzt
 compile time error 

Regel: Wenn Sie eine abstrakte Klasse erweitern, die über eine abstrakte Methode verfügt, müssen Sie entweder die Implementierung der Methode bereitstellen oder diese Klasse abstrakt machen.


Ein weiteres reales Szenario der abstrakten Klasse

Die abstrakte Klasse kann auch verwendet werden, um eine Implementierung von bereitzustellen Schnittstelle . In einem solchen Fall ist der Endbenutzer möglicherweise nicht gezwungen, alle Methoden der Schnittstelle zu überschreiben.

Hinweis: Wenn Sie Java-Anfänger sind, lernen Sie zuerst die Benutzeroberfläche kennen und überspringen Sie dieses Beispiel.

 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(); }} 
Testen Sie es jetzt
 Output:I am a I am b I am c I am d