logo

Abstraktni razred v Javi

V Javi je abstraktni razred deklariran s ključno besedo abstract. Lahko ima abstraktne in neabstraktne metode (metode s telesi). Povzetek je modifikator Java, ki se uporablja za razrede in metode v Javi, vendar ne za spremenljivke . V tem članku se bomo naučili uporabe abstraktnih razredov v Javi.

Kaj je abstraktni razred v Javi?

Abstraktni razred Java je razred, ki ga ni mogoče zagnati sam; za uporabo njegovih lastnosti ga mora podrazrediti drug razred. Abstraktni razred je deklariran z abstraktno ključno besedo v svoji definiciji razreda.



Ilustracija abstraktnega razreda

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

V Javi so naslednji nekateri pomembna opažanja o abstraktnih razredih so naslednji:

  1. Primerka abstraktnega razreda ni mogoče ustvariti.
  2. Konstruktorji so dovoljeni.
  3. Lahko imamo abstraktni razred brez abstraktne metode.
  4. Lahko obstaja a končna metoda v abstraktnem razredu, vendar nobene abstraktne metode v razredu (abstraktni razred) ni mogoče deklarirati kot končno ali preprosteje povedano, končna metoda sama po sebi ne more biti abstraktna, saj bo povzročila napako: Nedovoljena kombinacija modifikatorjev: abstraktno in končno
  5. V abstraktnem razredu lahko definiramo statične metode
  6. Lahko uporabimo abstraktna ključna beseda za razglasitev razrede najvišje ravni (zunanji razred) kot tudi notranje razrede kot abstraktno
  7. Če razred vsebuje vsaj ena abstraktna metoda potem bi moral obvezno razglasiti razred kot abstrakten
  8. Če je Otroški razred ne more zagotoviti implementacije za vse abstraktne metode Razred staršev potem bi morali to razglasiti Otroški razred kot abstrakten tako da mora naslednji razred Child zagotoviti implementacijo preostali abstraktni metodi

Primeri abstraktnega razreda Java

1. Primer abstraktnega razreda, ki ima abstraktno metodo

Spodaj je izvedba zgornje teme:

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

>

>

Izhod

avinash 21 222.2>

2. Abstraktni razred s konstruktorjem, podatkovnim članom in metodami

Elementi, ki jih lahko ima abstraktni razred

  • podatkovni član
  • abstraktna metoda
  • telo metode (neabstraktna metoda)
  • konstruktor
  • metoda main().

Spodaj je izvedba zgornje teme:

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

>

>

Izhod

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

Lastnosti abstraktnega razreda

Naj podrobneje razložimo ta opažanja in jih utemeljimo s pomočjo čistih programov java, kot sledi.

Opazovanje 1

V Javi, tako kot v C++, primerka abstraktnega razreda ni mogoče ustvariti, lahko pa imamo sklicevanja na tip abstraktnega razreda. To je, kot je prikazano spodaj prek čistega programa Java.

Primer

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

>

>

Izhod

koda abs c
Derived fun() called>

Opazovanje 2

Tako kot C++, an abstraktni razred lahko vsebuje konstruktorji v Javi. Ko je ustvarjen primerek podedovanega razreda, se pokliče konstruktor abstraktnega razreda. V spodnjem programu je prikazano takole:

primer:

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

>

>

Izhod

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

Opazovanje 3

V Javi lahko imamo abstraktni razred brez abstraktne metode . To nam omogoča ustvarite razrede, ki jih ni mogoče instancirati, ampak jih je mogoče samo podedovati . S pomočjo čistega programa Java je prikazano spodaj.

primer:

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

>

>

Izhod

Function of Base class is called>

Opazovanje 4

Abstraktni razredi imajo lahko tudi dokončno metode (metode, ki jih ni mogoče preglasiti)

primer:

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

>

>

Izhod

Base fun() called>

Opazovanje 5

Za noben abstrakten razred Java nam ni dovoljeno ustvariti predmeta, tj. za abstrakten razred instancacija ni mogoča.

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

>

>

Izhod:

abstraktni razred

Opazovanje 6

Podobno kot vmesnik lahko definiramo statične metode v abstraktnem razredu to lahko kličemo neodvisno brez predmeta.

Java




razširitvena datoteka 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();> >}> }>

>

>

Izhod

Geeks for Geeks>

Opazovanje 7

Lahko uporabimo abstraktna ključna beseda za razglasitev razredov najvišje ravni (zunanji razred) kot tudi notranjih razredov kot abstraktnih

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

>

>

Izhod

Inside abstract method implementation>

Opazovanje 8

Če razred vsebuje vsaj eno abstraktno metodo potem obvezno, da moramo razred razglasiti za abstrakten drugače bomo prejeli napako med prevajanjem. Če razred vsebuje vsaj eno abstraktno metodo, potem izvedba za ta razred ni dokončana, zato ni priporočljivo ustvariti predmeta, da bi omejili ustvarjanje objekta za takšne delne razrede uporabljamo abstraktna ključna beseda.

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

>

>

Izhod

Hello>

Opazovanje 9

Če je Otrok ne more zagotoviti implementacije za vse abstraktne metode razreda Parent, potem bi morali ta razred Child razglasiti za abstrakten, tako da bi moral razred Child naslednje stopnje zagotoviti implementacijo preostali abstraktni metodi.

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

>

>

Izhod

Inside m1 Inside m2 Inside m3>

V C++, če ima razred vsaj enega čista virtualna funkcija , potem razred postane abstrakten. Za razliko od C++ se v Javi za izdelavo izvlečka razreda uporablja ločen povzetek ključne besede.

Zaključek

Točke, ki si jih morate zapomniti iz tega članka, so navedene spodaj:

  • Abstraktni razred je razred, ki ga ni mogoče zagnati sam; za uporabo njegovih lastnosti ga mora podrazrediti drug razred.
  • Abstraktni razred je mogoče ustvariti z uporabo abstraktnih ključnih besed.
  • Lahko imamo abstraktni razred brez abstraktne metode.

Pogosta vprašanja o abstraktnem razredu

1. Kaj je abstraktni razred v Javi?

Abstraktni razred v Javi je razred, ki ga ni mogoče zagnati samega, ampak ga lahko drug razred uporabi kot podrazred.

2. Kaj je namen abstraktnega razreda?

Glavni namen abstraktnega razreda je ustvariti osnovni razred, iz katerega je mogoče izpeljati številne druge razrede.

3. Kaj je glavna prednost abstraktnega razreda?

Abstraktni razred zagotavlja skrivanje podatkov v Javi.

4. Zakaj je abstraktni razred hitrejši od vmesnika?

Abstraktni razred je hitrejši od vmesnika, ker vmesnik vključuje iskanje, preden pokliče katero koli preglaseno metodo v Javi, medtem ko je abstraktni razred mogoče uporabiti neposredno.

Tudi Preberite