logo

Abstrakt klasse i Java

En klasse, der er erklæret med det abstrakte nøgleord, er kendt som en abstrakt klasse i Java . Det kan have abstrakte og ikke-abstrakte metoder (metode med kroppen).

Før vi lærer Java abstrakt-klassen, lad os først forstå abstraktionen i Java.

konverter boolesk til streng

Abstraktion i Java

Abstraktion er en proces med at skjule implementeringsdetaljerne og kun vise funktionalitet til brugeren.

En anden måde, det viser kun væsentlige ting til brugeren og skjuler de interne detaljer, for eksempel at sende SMS, hvor du skriver teksten og sender beskeden. Du kender ikke den interne behandling af meddelelsesleveringen.

Abstraktion lader dig fokusere på, hvad der objekt gør i stedet for hvordan den gør det.

Måder at opnå abstraktion på

Der er to måder at opnå abstraktion på i java

  1. Abstrakt klasse (0 til 100 %)
  2. Interface (100 %)

Abstrakt klasse i Java

En klasse, der er erklæret som abstrakt, er kendt som en abstrakt klasse . Det kan have abstrakte og ikke-abstrakte metoder. Det skal udvides, og dets metode skal implementeres. Det kan ikke instantieres.

Punkter at huske

  • En abstrakt klasse skal erklæres med et abstrakt nøgleord.
  • Det kan have abstrakte og ikke-abstrakte metoder.
  • Det kan ikke instantieres.
  • Det kan have konstruktører og statiske metoder også.
  • Det kan have endelige metoder, som vil tvinge underklassen til ikke at ændre metodens krop.
Regler for Java abstrakt klasse

Eksempel på abstrakt klasse

 abstract class A{} 

Abstrakt metode i Java

En metode, der er erklæret som abstrakt og ikke har implementering, er kendt som en abstrakt metode.

Eksempel på abstrakt metode

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

Eksempel på abstrakt klasse, der har en abstrakt metode

I dette eksempel er Bike en abstrakt klasse, der kun indeholder én abstrakt metodekørsel. Dens implementering leveres af Honda-klassen.

 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 det nu
 running safely 

Forstå det virkelige scenarie for abstrakt klasse

I dette eksempel er Shape den abstrakte klasse, og dens implementering leveres af klasserne Rectangle og Circle.

For det meste kender vi ikke til implementeringsklassen (som er skjult for slutbrugeren), og et objekt af implementeringsklassen leveres af fabriksmetode .

EN fabriksmetode er en metode, der returnerer forekomsten af ​​klassen. Vi lærer om fabriksmetoden senere.

I dette eksempel, hvis du opretter forekomsten af ​​klassen Rectangle, vil draw()-metoden i klassen Rectangle blive aktiveret.

Fil: 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 det nu
 drawing circle 

Et andet eksempel på abstrakt klasse i java

Fil: 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 det nu
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstrakt klasse med konstruktør, datamedlem og metoder

En abstrakt klasse kan have et datamedlem, abstrakt metode, metodelegeme (ikke-abstrakt metode), konstruktør og endda main() metode.

Fil: TestAbstraction2.java

amplitudemodulation
 //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 det nu
 bike is created running safely.. gear changed 

Regel: Hvis der er en abstrakt metode i en klasse, skal den klasse være abstrakt.

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

Regel: Hvis du udvider en abstrakt klasse, der har en abstrakt metode, skal du enten sørge for implementeringen af ​​metoden eller gøre denne klasse abstrakt.


Endnu et virkeligt scenarie med abstrakt klasse

Den abstrakte klasse kan også bruges til at give en vis implementering af interface . I sådanne tilfælde er slutbrugeren muligvis ikke tvunget til at tilsidesætte alle grænsefladens metoder.

Bemærk: Hvis du er nybegynder til java, skal du først lære interface og springe dette eksempel 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 det nu
 Output:I am a I am b I am c I am d