logo

Abstrakt klasse i Java

I Java er abstrakt klasse erklæret med det abstrakte nøgleord. Det kan have både abstrakte og ikke-abstrakte metoder (metoder med kroppe). Et abstrakt er en Java-modifikator, der kan anvendes til klasser og metoder i Java, men ikke for variabler . I denne artikel lærer vi brugen af ​​abstrakte klasser i Java.

Hvad er abstrakt klasse i Java?

Java abstrakt klasse er en klasse, der ikke kan startes af sig selv, den skal underklasses af en anden klasse for at bruge dens egenskaber. En abstrakt klasse erklæres ved hjælp af det abstrakte nøgleord i sin klassedefinition.

Illustration af abstrakt klasse

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

I Java, følgende nogle vigtige observationer om abstrakte klasser er som følger:



  1. En forekomst af en abstrakt klasse kan ikke oprettes.
  2. Konstruktører er tilladt.
  3. Vi kan have en abstrakt klasse uden nogen abstrakt metode.
  4. Der 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 vendinger kan endelig metode ikke være abstrakt i sig selv, da det vil give en fejl: Ulovlig kombination af modifikatorer: abstrakt og endelig
  5. Vi kan definere statiske metoder i en abstrakt klasse
  6. Vi kan bruge abstrakt søgeord for at erklære topklasser (Ydre klasse) samt indre klasser som abstrakt
  7. Hvis en klasse indeholder mindst én abstrakt metode derefter obligatorisk skal erklære en klasse som abstrakt
  8. Hvis Børneklasse er ude af stand til at implementere alle abstrakte metoder Forældreklasse så bør vi erklære det Børneklasse som abstrakt så det næste niveau Child-klasse skulle give implementering til den resterende abstrakte metode

Eksempler på Java abstrakt klasse

1. Eksempel på abstrakt klasse, der har abstrakt metode

Nedenfor er implementeringen af ​​ovenstående emne:

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();> >}> }>

>

>

Produktion

avinash 21 222.2>

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

Elementer abstrakt klasse kan have

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

Nedenfor er implementeringen af ​​ovenstående emne:

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();> >}> }>

>

>

Produktion

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

Egenskaber for abstrakt klasse

Lad os uddybe disse observationer og retfærdiggøre dem ved hjælp af rene java-programmer som følger.

Observation 1

I Java, ligesom i C++, kan en instans af en abstrakt klasse ikke oprettes, vi kan dog have referencer til abstrakt klassetype. Det er som vist nedenfor via det rene Java-program.

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();> >}> }>

>

>

Produktion

konverter boolesk til streng
Derived fun() called>

Observation 2

Ligesom C++, en abstrakt klasse kan indeholde konstruktører i Java. Og en konstruktør af en abstrakt klasse kaldes, når en instans af en nedarvet klasse oprettes. Det er som vist i nedenstående program:

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();> >}> }>

>

>

Produktion

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

Observation 3

I Java kan vi have en abstrakt klasse uden nogen abstrakt metode . Dette giver os mulighed for oprette klasser, der ikke kan instansieres, men som kun kan nedarves . Det er som vist nedenfor som følger ved hjælp af 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();> >}> }>

>

>

Produktion

Function of Base class is called>

Observation 4

Abstrakte klasser kan også have endelig metoder (metoder, der ikke kan tilsidesættes)

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();> >}> >}> }>

>

>

Produktion

Base fun() called>

Observation 5

For enhver abstrakt java-klasse har vi ikke lov til at oprette 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();> >}> }>

>

>

Produktion:

abstrakt klasse

Observation 6

Svarende til grænsefladen vi kan definere statiske metoder i en abstrakt klasse at kan kaldes uafhængigt uden 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();> >}> }>

>

>

Produktion

Geeks for Geeks>

Observation 7

Vi kan bruge abstrakt søgeord for at erklære klasser på topniveau (ydre 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();> >}> }>

>

>

Produktion

amplitudemodulation
Inside abstract method implementation>

Observation 8

Hvis en klasse indeholder mindst én abstrakt metode derefter obligatorisk at vi skal erklære klassen som abstrakt ellers vil vi få en kompileringsfejl, hvis en klasse indeholder mindst én abstrakt metode, er implementeringen ikke komplet for den klasse, og det anbefales derfor ikke at oprette et objekt for at begrænse objektoprettelse for sådanne partielle klasser vi bruger abstrakt søgeord.

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();> >}> }>

>

>

Produktion

Hello>

Observation 9

Hvis Barn klasse ikke er i stand til at levere implementering til alle abstrakte metoder i forældreklassen, så skal vi erklære, at Child-klassen er abstrakt, så den næste Child-klasse skal levere implementering til den resterende abstrakte metode.

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();> >}> }>

>

>

Produktion

Inside m1 Inside m2 Inside m3>

I C++, hvis en klasse har mindst en ren virtuel funktion , så bliver klassen abstrakt. I modsætning til C++ bruges et separat søgeordsabstrakt i Java til at lave et klasseabstrakt.

Konklusion

Punkter at huske fra denne artikel er nævnt nedenfor:

  • En abstrakt klasse er en klasse, der ikke kan initieres af sig selv, den skal underklassificeres af en anden klasse for at bruge dens egenskaber.
  • En abstrakt klasse kan oprettes ved hjælp af abstrakte nøgleord.
  • Vi kan have en abstrakt klasse uden nogen abstrakt metode.

Ofte stillede spørgsmål om abstrakt klasse

1. Hvad er en abstrakt klasse i Java?

En abstrakt klasse i Java er en klasse, der ikke kan startes alene, men som kan bruges som en underklasse af en anden klasse.

2. Hvad er det abstrakte klasseformål?

Hovedformålet med den abstrakte klasse er at skabe en basisklasse, hvorfra mange andre klasser kan udledes.

3. Hvad er den største fordel ved abstrakt klasse?

En abstrakt klasse giver mulighed for at skjule data i Java.

4. Hvorfor abstrakt klasse er hurtigere end interface?

En abstrakt klasse er hurtigere end en grænseflade, fordi grænsefladen involverer en søgning, før den kalder nogen tilsidesat metode i Java, hvorimod abstrakt klasse kan bruges direkte.

Læs også