„Java“ abstrakčioji klasė deklaruojama naudojant abstraktų raktinį žodį. Jis gali turėti ir abstrakčius, ir neabstrakčius metodus (metodus su kūnais). Santrauka yra „Java“ modifikatorius, taikomas „Java“ klasėms ir metodams, bet ne kintamiesiems . Šiame straipsnyje mes išmoksime naudoti abstrakčias klases Java.
Kas yra abstrakčioji klasė Java?
Abstrakti Java klasė yra klasė, kurios negalima inicijuoti pati, ją reikia suskirstyti į kitą klasę, kad būtų galima naudoti jos savybes. Abstrakti klasė deklaruojama naudojant abstrakčią raktinį žodį savo klasės apibrėžime.
Abstrakčios klasės iliustracija
abstract class Shape { int color; // An abstract function abstract void draw(); }>
„Java“ yra keletas šių svarbių pastebėjimų apie abstrakčias klases yra tokios:
- Abstrakčios klasės egzemplioriaus sukurti negalima.
- Leidžiami konstruktoriai.
- Galime turėti abstrakčią klasę be jokio abstrakčiojo metodo.
- Gali būti a galutinis metodas abstrakčioje klasėje, bet bet koks abstraktus metodas klasėje (abstrakčioje klasėje) negali būti paskelbtas galutiniu arba, paprasčiau tariant, galutinis metodas negali būti pats abstraktus, nes jis duos klaidą: Neteisėtas modifikatorių derinys: abstraktus ir galutinis
- Statinius metodus galime apibrėžti abstrakčioje klasėje
- Mes galime naudoti abstraktus raktinis žodis už deklaravimą aukščiausio lygio klasės (Išorinė klasė), taip pat vidinės klasės kaip abstraktus
- Jeigu klasė yra bent vienas abstraktus metodas tada privalomas turėtų paskelbti klasę kaip abstrakčią
- Jei Vaikų klasė negali įgyvendinti visų abstrakčių metodų Tėvų klasė tada turėtume tai paskelbti Vaikų klasė kaip abstrakti kad kito lygio Vaikų klasė turėtų įgyvendinti likusį abstraktų metodą
Java abstrakčios klasės pavyzdžiai
1. Abstract Class, kuri turi abstrakčiąjį metodą, pavyzdys
Žemiau pateikiamas aukščiau pateiktos temos įgyvendinimas:
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();> > }> }> |
>
>Išvestis
avinash 21 222.2>
2. Abstrakti klasė, turinti konstruktorių, duomenų narį ir metodus
Elementai, kuriuos gali turėti abstrakčioji klasė
- duomenų narys
- abstraktus metodas
- metodo tekstas (neabstraktus metodas)
- konstruktorius
- pagrindinis() metodas.
Žemiau pateikiamas aukščiau pateiktos temos įgyvendinimas:
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();> > }> }> |
>
>Išvestis
Learning Subject C , Java , C++ Preparing Right Now!>
Abstrakčios klasės savybės
Išsamiau išnagrinėkime šiuos pastebėjimus ir pagrįskime juos švarių java programų pagalba.
1 pastebėjimas
„Java“, kaip ir C++, negalima sukurti abstrakčios klasės egzemplioriaus, tačiau galime turėti nuorodų į abstrakčiosios klasės tipą. Tai rodoma toliau naudojant švarią Java programą.
Pavyzdys
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();> > }> }> |
>
>Išvestis
strep c
Derived fun() called>
2 pastebėjimas
Kaip ir C++, an abstrakti klasė gali turėti konstruktoriai Java kalboje. O abstrakčiosios klasės konstruktorius iškviečiamas, kai sukuriamas paveldėtos klasės egzempliorius. Tai yra taip, kaip parodyta toliau pateiktoje programoje:
Pavyzdys:
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();> > }> }> |
>
>Išvestis
Base Constructor Called Derived Constructor Called Derived fun() called>
3 pastebėjimas
Java, mes galime turėti abstrakti klasė be jokio abstrakčiojo metodo . Tai leidžia mums sukurti klases, kurių negalima kartoti, bet galima tik paveldėti . Tai, kaip parodyta toliau, naudojant švarią Java programą.
Pavyzdys:
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();> > }> }> |
>
>Išvestis
Function of Base class is called>
4 pastebėjimas
Abstrakčios klasės taip pat gali turėti galutinis metodus (metodai, kurių negalima nepaisyti)
Pavyzdys:
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();> > }> > }> }> |
>
>Išvestis
Base fun() called>
5 pastebėjimas
Jokiai abstrakčiai „Java“ klasei neleidžiama kurti objekto, t. y. abstrakčiajai klasei egzistavimas neįmanomas.
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();> > }> }> |
>
>
Išvestis:
6 pastebėjimas
Panašus į sąsają galime apibrėžti statinius metodus abstrakčioje klasėje kad galima vadinti savarankiškai be objekto.
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();> > }> }> |
>
>Išvestis
Geeks for Geeks>
7 pastebėjimas
Mes galime naudoti abstraktus raktinis žodis aukščiausio lygio klasių (Išorinė klasė), taip pat vidinių klasių paskelbimui abstrakčiomis
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();> > }> }> |
>
>Išvestis
Inside abstract method implementation>
8 pastebėjimas
Jeigu klasėje yra bent vienas abstraktus metodas tada privalome skelbti klasę kaip abstrakčią kitu atveju gausime kompiliavimo laiko klaidą ,Jei klasėje yra bent vienas abstraktus metodas, tos klasės įgyvendinimas nėra baigtas, todėl nerekomenduojama kurti objekto, kad būtų apribotas objektų kūrimas tokioms dalinėms klasėms mes naudojame abstraktus raktinis žodis.
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();> > }> }> |
>
kaip išjungti kūrėjo režimą „Android“.
>Išvestis
Hello>
9 pastebėjimas
Jei Vaikas klasė negali įgyvendinti visų abstrakčių pagrindinės klasės metodų, tada turėtume paskelbti, kad ši klasė yra abstrakti, kad kito lygio Vaikų klasė turėtų įgyvendinti likusio abstrakčiojo metodo.
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();> > }> }> |
>
>Išvestis
Inside m1 Inside m2 Inside m3>
C++, jei klasėje yra bent vienas gryna virtuali funkcija , tada klasė tampa abstrakti. Skirtingai nei C++, „Java“ klasėje abstrakčiai paversti naudojamas atskiras raktinio žodžio abstraktus.
Išvada
Žemiau pateikiami šio straipsnio dalykai, kuriuos reikia atsiminti:
- Abstrakčioji klasė yra klasė, kurios negalima inicijuoti pati, ji turi būti suskirstyta į kitą klasę, kad būtų galima naudoti jos savybes.
- Abstrakčią klasę galima sukurti naudojant abstrakčius raktinius žodžius.
- Galime turėti abstrakčią klasę be jokio abstrakčiojo metodo.
Abstract klasės DUK
1. Kas yra abstrakčioji klasė Java?
Abstrakčioji klasė Java yra klasė, kuri negali būti inicijuota pati, bet gali būti naudojama kaip poklasis kitos klasės.
2. Koks yra abstrakčios klasės tikslas?
Pagrindinis abstrakčiosios klasės tikslas yra sukurti bazinę klasę, iš kurios būtų galima išvesti daugybę kitų klasių.
3. Koks yra pagrindinis abstrakčios klasės privalumas?
Abstrakti klasė suteikia galimybę paslėpti duomenis Java.
4. Kodėl abstrakčioji klasė yra greitesnė už sąsają?
Abstrakti klasė yra greitesnė nei sąsaja, nes sąsaja apima paiešką prieš iškviečiant bet kokį nepaisytą Java metodą, o abstrakčiąją klasę galima naudoti tiesiogiai.
Taip pat Skaitykite
- Skirtumas tarp abstrakčios klasės ir sąsajos Java
- Skirtumas tarp abstrakčiųjų klasių ir abstrakčių metodų
- „Java Abstract Class“ konstruktoriai