logo

Abstrakt klasse i Java

I Java er abstrakt klasse erklært med det abstrakte nøkkelordet. Det kan ha både abstrakte og ikke-abstrakte metoder (metoder med kropper). Et abstrakt er en Java-modifikator som gjelder for klasser og metoder i Java, men ikke for variabler . I denne artikkelen vil vi lære bruken av abstrakte klasser i Java.

Hva er abstrakt klasse i Java?

Java abstrakt klasse er en klasse som ikke kan startes av seg selv, den må underklasses av en annen klasse for å bruke egenskapene. En abstrakt klasse er deklarert ved å bruke det abstrakte nøkkelordet i klassedefinisjonen.



Illustrasjon av abstrakt klasse

abstract class Shape  {  int color;  // An abstract function  abstract void draw(); }>

I Java, følgende noen viktige observasjoner om abstrakte klasser er som følger:

  1. En forekomst av en abstrakt klasse kan ikke opprettes.
  2. Konstruktører er tillatt.
  3. Vi kan ha en abstrakt klasse uten noen abstrakt metode.
  4. Det kan være en endelig metode i abstrakt klasse, men enhver abstrakt metode i klasse (abstrakt klasse) kan ikke erklæres som endelig eller i enklere termer kan endelig metode ikke være abstrakt i seg selv, da det vil gi en feil: Ulovlig kombinasjon av modifikatorer: abstrakt og endelig
  5. Vi kan definere statiske metoder i en abstrakt klasse
  6. Vi kan bruke abstrakt nøkkelord for å erklære toppklasser (Ytre klasse) samt indre klasser som abstrakt
  7. Hvis en klasse inneholder minst én abstrakt metode da obligatorisk bør erklære en klasse som abstrakt
  8. Hvis Barneklasse er ikke i stand til å gi implementering til alle abstrakte metoder for Foreldreklasse da bør vi erklære det Barneklasse som abstrakt slik at neste nivå Child-klassen skal gi implementering til den gjenværende abstrakte metoden

Eksempler på Java Abstract Class

1. Eksempel på abstrakt klasse som har abstrakt metode

Nedenfor er implementeringen av emnet ovenfor:

Java








// Abstract class> abstract> class> Sunstar {> >abstract> void> printInfo();> }> // Abstraction performed using extends> class> Employee>extends> Sunstar {> >void> printInfo()> >{> >String name =>'avinash'>;> >int> age =>21>;> >float> salary =>222>.2F;> >System.out.println(name);> >System.out.println(age);> >System.out.println(salary);> >}> }> // Base class> class> Base {> >public> static> void> main(String args[])> >{> >Sunstar s =>new> Employee();> >s.printInfo();> >}> }>

>

>

Produksjon

avinash 21 222.2>

2. Abstrakt klasse med konstruktør, datamedlem og metoder

Elementer abstrakt klasse kan ha

  • datamedlem
  • abstrakt metode
  • metodetekst (ikke-abstrakt metode)
  • konstruktør
  • main() metode.

Nedenfor er implementeringen av emnet ovenfor:

Java




// Java Program to implement Abstract Class> // having constructor, data member, and methods> import> java.io.*;> abstract> class> Subject {> >Subject() {> >System.out.println(>'Learning Subject'>);> >}> > >abstract> void> syllabus();> > >void> Learn(){> >System.out.println(>'Preparing Right Now!'>);> >}> }> class> IT>extends> Subject {> >void> syllabus(){> >System.out.println(>'C , Java , C++'>);> >}> }> class> GFG {> >public> static> void> main(String[] args) {> >Subject x=>new> IT();> > >x.syllabus();> >x.Learn();> >}> }>

>

>

Produksjon

Learning Subject C , Java , C++ Preparing Right Now!>

Egenskaper for abstrakt klasse

La oss utdype disse observasjonene og rettferdiggjøre dem ved hjelp av rene java-programmer som følger.

Observasjon 1

I Java, akkurat som i C++, kan en forekomst av en abstrakt klasse ikke opprettes, vi kan imidlertid ha referanser til abstrakt klassetype. Det er som vist nedenfor via det rene Java-programmet.

Eksempel

Java




// Java Program to Illustrate> // that an instance of Abstract> // Class can not be created> // Class 1> // Abstract class> abstract> class> Base {> >abstract> void> fun();> }> // Class 2> class> Derived>extends> Base {> >void> fun()> >{> >System.out.println(>'Derived fun() called'>);> >}> }> // Class 3> // Main class> class> Main {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Uncommenting the following line will cause> >// compiler error as the line tries to create an> >// instance of abstract class. Base b = new Base();> >// We can have references of Base type.> >Base b =>new> Derived();> >b.fun();> >}> }>

>

>

Produksjon

java concat strenger
Derived fun() called>

Observasjon 2

Som C++, an abstrakt klasse kan inneholde konstruktører i Java. Og en konstruktør av en abstrakt klasse kalles når en forekomst av en arvet klasse opprettes. Det er som vist i programmet nedenfor:

Eksempel:

Java




// Java Program to Illustrate Abstract Class> // Can contain Constructors> // Class 1> // Abstract class> abstract> class> Base {> >// Constructor of class 1> >Base()> >{> >// Print statement> >System.out.println(>'Base Constructor Called'>);> >}> >// Abstract method inside class1> >abstract> void> fun();> }> // Class 2> class> Derived>extends> Base {> >// Constructor of class2> >Derived()> >{> >System.out.println(>'Derived Constructor Called'>);> >}> >// Method of class2> >void> fun()> >{> >System.out.println(>'Derived fun() called'>);> >}> }> // Class 3> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating object of class 2> >// inside main() method> >Derived d =>new> Derived();> >d.fun();> >}> }>

>

>

Produksjon

Base Constructor Called Derived Constructor Called Derived fun() called>

Observasjon 3

I Java kan vi ha en abstrakt klasse uten noen abstrakt metode . Dette gjør at vi kan lage klasser som ikke kan instansieres, men som bare kan arves . Det er som vist nedenfor som følger ved hjelp av et rent java-program.

Eksempel:

Java




// Java Program to illustrate Abstract class> // Without any abstract method> // Class 1> // An abstract class without any abstract method> abstract> class> Base {> >// Demo method. This is not an abstract method.> >void> fun()> >{> >// Print message if class 1 function is called> >System.out.println(> >'Function of Base class is called'>);> >}> }> // Class 2> class> Derived>extends> Base {> >// This class only inherits the Base class methods and> >// properties> }> // Class 3> class> Main {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating object of class 2> >Derived d =>new> Derived();> >// Calling function defined in class 1 inside main()> >// with object of class 2 inside main() method> >d.fun();> >}> }>

>

>

Produksjon

Function of Base class is called>

Observasjon 4

Abstrakte klasser kan også ha endelig metoder (metoder som ikke kan overstyres)

Eksempel:

Java




// Java Program to Illustrate Abstract classes> // Can also have Final Methods> // Class 1> // Abstract class> abstract> class> Base {> >final> void> fun()> >{> >System.out.println(>'Base fun() called'>);> >}> }> // Class 2> class> Derived>extends> Base {> > }> // Class 3> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >{> >// Creating object of abstract class> >Base b =>new> Derived();> >// Calling method on object created above> >// inside main method> >b.fun();> >}> >}> }>

>

>

Produksjon

Base fun() called>

Observasjon 5

For enhver abstrakt java-klasse har vi ikke lov til å lage et objekt, dvs. for en abstrakt klasse er instansiering ikke mulig.

Java




// Java Program to Illustrate Abstract Class> // Main class> // An abstract class> abstract> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Trying to create an object> >GFG gfg =>new> GFG();> >}> }>

>

>

Produksjon:

abstrakt klasse

Observasjon 6

Ligner på grensesnittet vi kan definere statiske metoder i en abstrakt klasse at kan kalles uavhengig uten et objekt.

Java




// Java Program to Illustrate> // Static Methods in Abstract> // Class Can be called Independently> // Class 1> // Abstract class> abstract> class> Helper {> >// Abstract method> >static> void> demofun()> >{> >// Print statement> >System.out.println(>'Geeks for Geeks'>);> >}> }> // Class 2> // Main class extending Helper class> public> class> GFG>extends> Helper {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Calling method inside main()> >// as defined in above class> >Helper.demofun();> >}> }>

>

>

Produksjon

Geeks for Geeks>

Observasjon 7

Vi kan bruke abstrakt nøkkelord for å erklære toppnivåklasser (Ytre klasse) samt indre klasser som abstrakte

Java




import> java.io.*;> abstract> class> B {> >// declaring inner class as abstract with abstract> >// method> >abstract> class> C {> >abstract> void> myAbstractMethod();> >}> }> class> D>extends> B {> >class> E>extends> C {> >// implementing the abstract method> >void> myAbstractMethod()> >{> >System.out.println(> >'Inside abstract method implementation'>);> >}> >}> }> public> class> Main {> >public> static> void> main(String args[])> >{> >// Instantiating the outer class> >D outer =>new> D();> >// Instantiating the inner class> >D.E inner = outer.>new> E();> >inner.myAbstractMethod();> >}> }>

>

>

Produksjon

zip-kommando i linux
Inside abstract method implementation>

Observasjon 8

Hvis en klasse inneholder minst én abstrakt metode deretter obligatorisk at vi skal erklære klassen som abstrakt ellers vil vi få en kompileringstidsfeil ,Hvis en klasse inneholder minst én abstrakt metode, er ikke implementeringen fullført for den klassen, og derfor anbefales det ikke å lage et objekt for å begrense objektoppretting for slike delklasser vi bruker abstrakt nøkkelord.

Java




/*package whatever //do not write package name here */> import> java.io.*;> // here if we remove the abstract> // keyword then we will get compile> // time error due to abstract method> abstract> class> Demo {> >abstract> void> m1();> }> class> Child>extends> Demo {> >public> void> m1()> >{> >System.out.print(>'Hello'>);> >}> }> class> GFG {> >public> static> void> main(String[] args)> >{> >Child c =>new> Child();> >c.m1();> >}> }>

>

>

Produksjon

Hello>

Observasjon 9

Hvis Barn klasse ikke er i stand til å gi implementering til alle abstrakte metoder i foreldreklassen, så bør vi erklære at Child-klassen er abstrakt, slik at neste nivå Child-klassen skal gi implementering til den gjenværende abstrakte metoden.

Java




// Java Program to demonstrate> // Observation> import> java.io.*;> abstract> class> Demo {> >abstract> void> m1();> >abstract> void> m2();> >abstract> void> m3();> }> abstract> class> FirstChild>extends> Demo {> >public> void> m1() {> >System.out.println(>'Inside m1'>);> >}> }> class> SecondChild>extends> FirstChild {> >public> void> m2() {> >System.out.println(>'Inside m2'>);> >}> >public> void> m3() {> >System.out.println(>'Inside m3'>);> >}> }> class> GFG {> >public> static> void> main(String[] args)> >{> >// if we remove the abstract keyword from FirstChild> >// Class and uncommented below obj creation for> >// FirstChild then it will throw> >// compile time error as did't override all the> >// abstract methods> >// FirstChild f=new FirstChild();> >// f.m1();> >SecondChild s =>new> SecondChild();> >s.m1();> >s.m2();> >s.m3();> >}> }>

>

>

Produksjon

Inside m1 Inside m2 Inside m3>

I C++, hvis en klasse har minst en ren virtuell funksjon , da blir klassen abstrakt. I motsetning til C++, i Java, brukes et eget nøkkelordabstrakt for å lage et klasseabstrakt.

Konklusjon

Punkter å huske fra denne artikkelen er nevnt nedenfor:

  • En abstrakt klasse er en klasse som ikke kan initieres av seg selv, den må underklasses av en annen klasse for å bruke egenskapene.
  • En abstrakt klasse kan lages ved å bruke abstrakte nøkkelord.
  • Vi kan ha en abstrakt klasse uten noen abstrakt metode.

Vanlige spørsmål om abstrakt klasse

1. Hva er en abstrakt klasse i Java?

En abstrakt klasse i Java er en klasse som ikke kan startes på egen hånd, men som kan brukes som en underklasse av en annen klasse.

2. Hva er formålet med den abstrakte klassen?

Hovedformålet med den abstrakte klassen er å lage en basisklasse som mange andre klasser kan utledes fra.

3. Hva er hovedfordelen med abstrakt klasse?

En abstrakt klasse gir data som skjuler seg i Java.

4. Hvorfor abstrakt klasse er raskere enn grensesnitt?

En abstrakt klasse er raskere enn et grensesnitt fordi grensesnittet innebærer et søk før du kaller en overstyrt metode i Java, mens abstrakt klasse kan brukes direkte.

Les også