logo

Konstruktor v abstraktnem razredu v Javi

Abstraktni razred v Javi je razred, ki ga ni mogoče neposredno instancirati. Cilj tega je delovati kot osnovni razred, iz katerega bi lahko drugi razredi podedovali in razširili. Ena od pomembnih lastnosti je, da ima abstraktni razred možnost definiranja konstruktorjev, ki so znani kot posebne metode in se prikličejo, ko je ustvarjen objekt razreda.

Pravila, ki jih je treba upoštevati pri definiranju konstruktorjev v abstraktnem razredu:

  1. Abstraktni razredi imajo lahko konstruktorje, vendar jih ni mogoče neposredno instancirati. Konstruktorji se uporabljajo, ko se ustvari konkreten podrazred.
  2. V abstraktnem razredu je lahko ena ali več abstraktnih metod, kar pomeni, da te metode niso implementirane s pomočjo razreda. Za instanciranje mora podrazred, ki razširja abstraktni razred z abstraktnimi metodami, izvajati metode. To pomeni, da mora imeti vsaka abstraktna metoda, deklarirana znotraj abstraktnega razreda, izvedbo, če mora biti podrazred konkreten razred in ga je mogoče instancirati. Z drugimi besedami, funkcionalnost, ki jo je abstraktni razred pustil odprto, mora izpolniti podrazred.
  3. Ko podrazred razširi abstraktni razred s konstruktorji, mora podrazred poklicati enega od konstruktorjev znotraj nadrazreda s pomočjo ključne besede super. Ker konstruktor nadrazreda inicializira stanje objekta in združi vse vitalne vire. Če podrazred zdaj ne pokliče enega od konstruktorjev v nadrazredu, objekt ne bo dobro inicializiran in zdaj ne bo deloval učinkovito/pravilno.
  4. Možno je definirati več kot en konstruktor v abstraktnem razredu, podobno kot v kakšnem drugem razredu. Vendar mora biti vsak konstruktor definiran z drugačnim seznamom parametrov. Podrazredom omogoča, da izberejo, kateri konstruktor naj pokličejo glede na njihove posebne potrebe.

Vrste konstruktorjev, implementiranih z uporabo abstraktnega razreda:

Obstajajo tri vrste konstruktorjev:

  1. Privzeti konstruktor
  2. Parametriziran konstruktor
  3. Konstruktor Kopiraj

1. Privzeti konstruktor: Konstruktor se samodejno ustvari prek Jave, če v razredu ni definiran noben drug konstruktor. Nima parametrov in ne izvaja nobenih premikov razen inicializacije privzetih vrednosti za polja razreda.

ALGORITEM:

Korak 1: Definirajte abstraktni razred z imenom 'Oblika'.

2. korak: Razglasite dve celoštevilski spremenljivki 'x' in 'y' kot zaščiteni.

3. korak: Ustvarite privzeti konstruktor razreda Shape in nastavite 'x' in 'y' na 0.

4. korak: Zdaj ustvarite metodo 'getArea()', to je abstraktna metoda, ki bo vrnila dvojno vrednost

5. korak: Nato ustvarite dve neabstraktni metodi 'printPosition()' in 'setPosition(int x, int y)', ki pripadata razredu Shape.

6. korak: Metoda setPosition nastavi vrednosti x in y.

7. korak: Metoda printPosition natisne vrednosti x in y.

8. korak: Definirajte razred Circle, ki razširja razred Shape.

9. korak: Razglasite dvojno spremenljivko z imenom 'radius' kot zaščiteno v razredu Circle.

10. korak: Definirajte konstruktor za razred Circle, ki sprejme dvojno vrednost za polmer.

11. korak: Implementirajte metodo getArea za razred Circle, ki izračuna ploščino kroga.

12. korak: Definirajte razred Square, ki razširja razred Shape.

13. korak: Razglasite dvojno spremenljivko z imenom 'side' kot zaščiteno v razredu Square.

14. korak: Definirajte konstruktor za razred Square, ki sprejme dvojno vrednost za stranico.

15. korak: Izvedite metodo getArea za razred Square, ki izračuna ploščino kvadrata.

16. korak: Definirajte glavni razred.

17. korak: Definirajte glavno funkcijo v razredu Main.

18. korak: Ustvarite krog in kvadrat.

19. korak: Pokličite metodo setPosition za objekta Circle in Square.

20. korak: Pokličite metodo getArea za objekta Circle in Square in natisnite rezultate.

21. korak: Pokličite metodo printPosition za krog in kvadrat in natisnite rezultate.

Izvedba:

java znak v niz

Tukaj je izvedba zgornjih korakov

Ime datoteke: DefaultMain.java

 import java.util.*; abstract class Shape { protected int x; protected int y; // default constructor public Shape() { // initialize default values for fields x = 0; y = 0; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x=x; this.y=y; } public void printPosition() { System.out.println('The Position: ('+x + ', '+ y +')'); } } class Circle extends Shape { protected double radius; // constructor public Circle(double radius) { this.radius=radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // constructor public Square(double side) { this.side = side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class DefaultMain { public static void main(String args []) { // create a Circle object Circle circle = new Circle(5); circle.setPosition(2,3); // print the area and position of the Circle object System.out.println('Area of a circle is: '+circle.getArea()); circle.printPosition(); // create a Square object Square square = new Square(4); square.setPosition(5, 7); // print the area and position of the Square object System.out.println('Area of a square is: '+square.getArea()); square.printPosition(); } } 

Izhod:

 Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7) 

2. Parametrizirani konstruktor: Ko ustvarjate objekt, vam ta vrsta konstruktorja omogoča, da mu posredujete argumente. Ko želite inicializirati objekt z vrednostmi, je to v pomoč. Parametrizirani konstruktor je definiran z enim ali dodatnimi parametri in medtem ko je predmet ustvarjen, se vrednosti, posredovane konstruktorju, uporabijo za inicializacijo ustreznih polj postavke.

ALGORITEM:

Korak 1: Definirajte abstraktni razred Shape.

2. korak: Dodajte dve zaščiteni spremenljivki primerka tipa int z imenom x in y.

3. korak: Ustvarite parametriran konstruktor, ki inicializira spremenljivki primerka x in y ter sprejme dva parametra tipa int, x in y.

4. korak: Definirajte abstraktni razred Shape.

5. korak: Dodajte dve zaščiteni spremenljivki primerka tipa int z imenom x in y.

6. korak: Ustvarite parametriran konstruktor, ki inicializira spremenljivki primerka x in y ter sprejme dva parametra tipa int, x in y.

7. korak: Definirajte razred Circle, ki razširja Shape.

8. korak: Dodajte zaščiteno spremenljivko primerka tipa dvojno imenovan polmer.

9. korak: Definirajte parametriran konstruktor, ki sprejme tri parametre tipa int x, y in dvojni radij ter inicializira spremenljivke primerka x, y in radius s ključno besedo super().

10. korak: Izvedite abstraktno metodo getArea() z izračunom površine kroga.

11. korak: Definirajte razred Square, ki razširja Shape.

12. korak: Dodajte zaščiteno spremenljivko primerka tipa dvojno imenovana stran.

13. korak: Definirajte parametrizirani konstruktor, ki sprejme tri parametre tipa int x, y in dvojno stran ter inicializira spremenljivke primerka x, y in stran s ključno besedo super().

14. korak: Izvedite abstraktno metodo getArea() z izračunom površine kvadrata.

15. korak: Definirajte razred Main.

16. korak: Definirajte statično metodo z imenom main(), ki je vstopna točka programa.

17. korak: Ustvarite objekt Circle z uporabo parametriranega konstruktorja.

18. korak: Natisnite površino in položaj predmeta Circle z metodama getArea() oziroma printPosition().

19. korak: Ustvari kvadratni objekt z uporabo parametriranega konstruktorja.

20. korak: Natisnite površino in položaj kvadratnega predmeta z metodama getArea() oziroma printPosition().

21. korak: Konec programa.

Izvedba:

Izvedba zgornjih korakov je navedena spodaj

Ime datoteke: ParameterizedMain.java

 import java.util.*; abstract class Shape { protected int x; protected int y; // parameterized constructor public Shape(int x,int y) { this.x=x; this.y=y; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x=x; this.y=y; } public void printPosition() { System.out.println('The position: ('+ x+', ' +y+')'); } } class Circle extends Shape { protected double radius; // parameterized constructor public Circle(int x,int y,double radius) { super(x,y); this.radius=radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // parameterized constructor public Square(int x,int y,double side) { super(x, y); this.side = side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class ParameterizedMain { public static void main(String args []) { // create a Circle object with parameterized constructor Circle circle = new Circle(2, 3, 5); // print the area and position of the Circle object System.out.println('Area of circle is: '+circle.getArea()); circle.printPosition(); // create a Square object with parameterized constructor Square square = new Square(5, 7, 4); // print the area and position of the Square object System.out.println('Area of square is:' +square.getArea()); square.printPosition(); } } 

Izhod:

blagajna v git
 Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7) 

3. Konstruktor kopiranja: Konstruktor kopiranja se uporablja za ustvarjanje novega predmeta z enakimi vrednostmi kot obstoječi objekt (tj. postavka je ustvarjena prej kot). Uporabno je, ko moramo ustvariti nov objekt, ki je lahko replika predmeta, ki je že prisoten/obstajal. Konstruktor kopiranja je definiran samo z enim argumentom ali enim parametrom, ki je postavka identičnega razreda. Nato konstruktor ustvari nov objekt z enakimi vrednostmi kot objekt parametra.

ALGORITEM:

Korak 1: Deklarirajte abstraktni razred s spremenljivkami primerka in privzetim konstruktorjem.

2. korak: Definirajte kopirni konstruktor s parametrom enakega tipa razreda.

3. korak: V konstruktorju kopiranja pokličite konstruktor kopiranja nadrazreda s ključno besedo super, da kopirate spremenljivke primerka iz objekta parametra v nov objekt.

4. korak: Novemu elementu dodelite vrednosti vseh dodatnih spremenljivk primerka znotraj podrazreda.

5. korak: Izvedite abstraktno metodo za izračun površine.

6. korak: Po potrebi določite morebitne druge metode.

7. korak: V glavni funkciji ustvarite predmet razreda.

8. korak: Po potrebi nastavite položaj in morebitne druge spremenljivke primerka.

9. korak: Ustvarite nov objekt z uporabo konstruktorja kopiranja in posredovanjem izvirnega elementa kot parametra.

10. korak: Natisnite območje in položaj originalnih in kopiranih predmetov.

Izvedba:

Izvedba zgornjih korakov je podana spodaj

Ime datoteke: CopyMain.java

 import java.util.*; abstract class Shape { protected int x; protected int y; // copy constructor public Shape(Shape other) { this.x=other.x; this.y=other.y; } // default constructor public Shape() { // initialize default values for fields x=0; y=0; } // abstract method to calculate area public abstract double getArea(); // other methods public void setPosition(int x,int y) { this.x =x; this.y =y; } public void printPosition() { System.out.println('Position: (' +x+ ', ' +y+ ')'); } } class Circle extends Shape { protected double radius; // copy constructor public Circle(Circle other) { super(other); this.radius =other.radius; } // constructor public Circle(double radius) { this.radius =radius; } // implementation of getArea() for Circle public double getArea() { return Math.PI * radius * radius; } } class Square extends Shape { protected double side; // copy constructor public Square(Square other) { super(other); this.side =other.side; } // constructor public Square(double side) { this.side=side; } // implementation of getArea() for Square public double getArea() { return side * side; } } public class CopyMain { public static void main(String[] args) { // create a Circle object Circle circle1 = new Circle(5); circle1.setPosition(2,3); // create a copy of the Circle object using the copy constructor Circle circle2 = new Circle(circle1); // print the area and position of the original and copied Circle objects System.out.println('Original Area of circle: ' +circle1.getArea()); circle1.printPosition(); System.out.println('Copied Area of circle: '+circle2.getArea()); circle2.printPosition(); // create a Square object Square square1 =new Square(4); square1.setPosition(5,7); // create a copy of the Square object using the copy constructor Square square2 = new Square(square1); // print the area and position of the original and copied Square objects System.out.println('Original Area of square: '+square1.getArea()); square1.printPosition(); System.out.println('Copied Area of square: '+square2.getArea()); square2.printPosition(); } } 

Izhod:

 Original Area of circle: 78.53981633974483 Position: (2, 3) Copied Area of circle: 78.53981633974483 Position: (2, 3) Original Area of square: 16.0 Position: (5, 7) Copied Area of square: 16.0 Position: (5, 7)