logo

Abstrakt klasse i Java

En klasse som er deklarert med det abstrakte nøkkelordet er kjent som en abstrakt klasse i Java . Det kan ha abstrakte og ikke-abstrakte metoder (metode med kroppen).

Før vi lærer Java abstrakt-klassen, la oss først forstå abstraksjonen i Java.

java concat strenger

Abstraksjon i Java

Abstraksjon er en prosess for å skjule implementeringsdetaljene og kun vise funksjonalitet til brukeren.

En annen måte, den viser kun viktige ting til brukeren og skjuler de interne detaljene, for eksempel å sende SMS hvor du skriver teksten og sender meldingen. Du kjenner ikke til den interne behandlingen av meldingsleveringen.

Abstraksjon lar deg fokusere på hva gjenstand gjør i stedet for hvordan den gjør det.

Måter å oppnå abstraksjon på

Det er to måter å oppnå abstraksjon i java

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

Abstrakt klasse i Java

En klasse som er erklært som abstrakt er kjent som en abstrakt klasse . Det kan ha abstrakte og ikke-abstrakte metoder. Den må utvides og metoden implementeres. Det kan ikke instansieres.

Poeng å huske

  • En abstrakt klasse må deklareres med et abstrakt nøkkelord.
  • Det kan ha abstrakte og ikke-abstrakte metoder.
  • Det kan ikke instansieres.
  • Det kan ha konstruktører og statiske metoder også.
  • Den kan ha endelige metoder som vil tvinge underklassen til ikke å endre hoveddelen av metoden.
Regler for Java Abstrakt-klassen

Eksempel på abstrakt klasse

 abstract class A{} 

Abstrakt metode i Java

En metode som er erklært som abstrakt og ikke har implementering er kjent som en abstrakt metode.

Eksempel på abstrakt metode

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

Eksempel på abstrakt klasse som har en abstrakt metode

I dette eksemplet er Bike en abstrakt klasse som bare inneholder én abstrakt metodekjøring. Implementeringen er levert av 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 nå
 running safely 

Forstå det virkelige scenariet for abstrakt klasse

I dette eksemplet er Shape den abstrakte klassen, og implementeringen av den leveres av klassene Rectangle og Circle.

For det meste vet vi ikke om implementeringsklassen (som er skjult for sluttbrukeren), og et objekt av implementeringsklassen leveres av fabrikkmetoden .

EN fabrikkmetoden er en metode som returnerer forekomsten av klassen. Vi vil lære om fabrikkmetoden senere.

I dette eksemplet, hvis du oppretter forekomsten av Rectangle-klassen, vil draw()-metoden til Rectangle-klassen bli påkalt.

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 nå
 drawing circle 

Et annet 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 nå
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Abstrakt klasse med konstruktør, datamedlem og metoder

En abstrakt klasse kan ha et datamedlem, abstrakt metode, metodelegeme (ikke-abstrakt metode), konstruktør og til og med main() metode.

Fil: TestAbstraction2.java

zip-kommando i linux
 //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 nå
 bike is created running safely.. gear changed 

Regel: Hvis det er en abstrakt metode i en klasse, må den klassen være abstrakt.

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

Regel: Hvis du utvider en abstrakt klasse som har en abstrakt metode, må du enten gi implementeringen av metoden eller gjøre denne klassen abstrakt.


Et annet virkelig scenario med abstrakt klasse

Den abstrakte klassen kan også brukes til å gi en viss implementering av grensesnitt . I slike tilfeller kan det hende at sluttbrukeren ikke blir tvunget til å overstyre alle metodene i grensesnittet.

Merk: Hvis du er nybegynner i java, lær deg grensesnittet først og hopp over dette eksemplet.

 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 nå
 Output:I am a I am b I am c I am d