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
- Abstrakte Klasse (0 bis 100 %)
- 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.
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