logo

Abstracte klasse op Java

Een klasse die wordt gedeclareerd met het abstracte trefwoord staat bekend als een abstracte klasse in Java . Het kan abstracte en niet-abstracte methoden hebben (methode met het lichaam).

Voordat we de abstracte klasse Java leren, moeten we eerst de abstractie in Java begrijpen.

geïnstantieerde Java

Abstractie op Java

Abstractie is een proces waarbij de implementatiedetails worden verborgen en alleen de functionaliteit aan de gebruiker wordt getoond.

Een andere manier is dat het alleen essentiële dingen aan de gebruiker laat zien en de interne details verbergt, bijvoorbeeld het verzenden van sms-berichten waar u de tekst typt en het bericht verzendt. U kent de interne verwerking van de berichtbezorging niet.

Met abstractie kun je je concentreren op wat er is voorwerp doet in plaats van hoe het het doet.

Manieren om abstractie te bereiken

Er zijn twee manieren om abstractie in Java te bereiken

  1. Abstracte klasse (0 tot 100%)
  2. Interface (100%)

Abstracte klasse op Java

Een klasse die als abstract wordt gedeclareerd, staat bekend als een abstracte klasse . Het kan abstracte en niet-abstracte methoden hebben. Het moet worden uitgebreid en de methode moet worden geïmplementeerd. Het kan niet worden geïnstantieerd.

Punten om te onthouden

  • Een abstracte klasse moet worden gedeclareerd met een abstract trefwoord.
  • Het kan abstracte en niet-abstracte methoden hebben.
  • Het kan niet worden geïnstantieerd.
  • Het kan hebben constructeurs en ook statische methoden.
  • Het kan definitieve methoden hebben die de subklasse dwingen de hoofdtekst van de methode niet te wijzigen.
Regels voor de Java Abstract-klasse

Voorbeeld van abstracte klasse

 abstract class A{} 

Abstracte methode in Java

Een methode die als abstract wordt gedeclareerd en geen implementatie heeft, staat bekend als een abstracte methode.

Voorbeeld van abstracte methode

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

Voorbeeld van een abstracte klasse met een abstracte methode

In dit voorbeeld is Bike een abstracte klasse die slechts één abstracte methoderun bevat. De implementatie ervan wordt verzorgd door de 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(); } } 
Test het nu
 running safely 

Het echte scenario van abstracte klasse begrijpen

In dit voorbeeld is Shape de abstracte klasse en wordt de implementatie ervan verzorgd door de klassen Rectangle en Circle.

Meestal weten we niets over de implementatieklasse (die verborgen is voor de eindgebruiker), en een object van de implementatieklasse wordt geleverd door de fabrieksmethode .

A fabrieksmethode is een methode die de instantie van de klasse retourneert. We zullen later meer leren over de fabrieksmethode.

Als u in dit voorbeeld de instantie van de klasse Rectangle maakt, wordt de methode draw() van de klasse Rectangle aangeroepen.

zoek in tekenreeks c++

Bestand: 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(); } } 
Test het nu
 drawing circle 

Nog een voorbeeld van de abstracte klasse in Java

Bestand: 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()+' %'); }} 
Test het nu
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstracte klasse met constructor, datalid en methoden

Een abstracte klasse kan een datalid, een abstracte methode, een methodelichaam (niet-abstracte methode), een constructor en zelfs een main()-methode hebben.

Bestand: 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(); } } 
Test het nu
 bike is created running safely.. gear changed 

Regel: Als er een abstracte methode in een klasse aanwezig is, moet die klasse abstract zijn.

 class Bike12{ abstract void run(); } 
Test het nu
 compile time error 

Regel: Als u een abstracte klasse uitbreidt die een abstracte methode heeft, moet u ofwel de implementatie van de methode leveren ofwel deze klasse abstract maken.


Nog een echt scenario van abstracte klasse

De abstracte klasse kan ook worden gebruikt om enige implementatie van de koppel . In een dergelijk geval wordt de eindgebruiker mogelijk niet gedwongen om alle methoden van de interface te negeren.

Opmerking: als u een beginner bent met Java, leer dan eerst de interface en sla dit voorbeeld over.

 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(); }} 
Test het nu
 Output:I am a I am b I am c I am d