logo

Konstruktors Java abstraktajā klasē

Abstraktā klase Java ir klase, kuru nevar tieši izveidot. Tā mērķis ir darboties kā bāzes klasei, no kuras citas klases varētu mantot un paplašināties. Viena no svarīgajām iezīmēm, ka abstraktai klasei ir iespēja definēt konstruktorus, kas ir pazīstami kā īpašas metodes un tiek izsaukti, kad tiek izveidots klases objekts.

Noteikumi, kas jāievēro, definējot konstruktorus abstraktā klasē:

  1. Abstraktajām klasēm var būt konstruktori, taču tos nevar izveidot tieši. Konstruktori tiek izmantoti, kad tiek izveidota konkrēta apakšklase.
  2. Abstraktā klasē var būt viena vai vairākas abstraktas metodes, kas nozīmē, ka šīs metodes netiek ieviestas ar klases palīdzību. Lai apakšklase, kas paplašina abstraktu klasi ar abstraktām metodēm, būtu instantierēta, šīs metodes ir jāievieš. Tas nozīmē, ka katrai abstraktai metodei, kas deklarēta abstraktā klasē, ir jābūt ieviestai, ja apakšklasei ir jābūt konkrētai klasei un tai jābūt instantiācijai. Citiem vārdiem sakot, apakšklasei ir jāaizpilda funkcionalitāte, ko abstraktā klase atstāja atvērtu.
  3. Kad apakšklase paplašina abstraktu klasi ar konstruktoriem, apakšklasei ir jāizsauc viens no konstruktoriem virsklasē ar superatslēgvārda palīdzību. Tā kā virsklases konstruktors inicializē objekta stāvokli un apvieno visus svarīgos resursus. Ja apakšklase tagad neizsauc kādu no superklases konstruktoriem, objekts nebūs labi inicializēts un tagad nedarbosies efektīvi/pareizi.
  4. Abstraktā klasē ir iespējams definēt vairāk nekā vienu konstruktoru, kas ir līdzīgs kādai citai klasei. Tomēr katrs konstruktors ir jādefinē ar atšķirīgu parametru sarakstu. Tas ļauj apakšklasēm izvēlēties, kuru konstruktoru izsaukt, pamatojoties uz to īpašajām vajadzībām.

Konstruktoru veidi, kas ieviesti, izmantojot abstrakto klasi:

Ir trīs veidu konstruktori, vai tie ir:

  1. Noklusējuma konstruktors
  2. Parametrizēts konstruktors
  3. Kopēšanas konstruktors

1. Noklusējuma konstruktors: Konstruktors tiek automātiski izveidots, izmantojot Java, ja klasē nav definēts cits konstruktors. Tam nav parametru, un tas neveic nekādas darbības, izņemot klases lauku noklusējuma vērtību inicializāciju.

ALGORITMS:

1. darbība: Definējiet abstraktu klasi ar nosaukumu 'Forma'.

2. darbība: Pasludiniet divus veselus skaitļu mainīgos 'x' un 'y' kā aizsargātus.

3. darbība: Izveidojiet Shape klases noklusējuma konstruktoru un iestatiet “x” un “y” uz 0.

4. darbība: Tagad izveidojiet metodi 'getArea()', tā ir abstrakta metode, kas atgriezīs dubultu vērtību

5. darbība: Pēc tam izveidojiet divas neabstraktas metodes 'printPosition()' un 'setPosition(int x, int y)', kas pieder Shape klasei.

6. darbība: Metode setPosition nosaka x un y vērtības.

7. darbība: Metode printPosition izdrukā x un y vērtības.

8. darbība: Definējiet Circle klasi, kas paplašina Shape klasi.

9. darbība: Pasludiniet dubulto mainīgo ar nosaukumu 'rādiuss' kā aizsargātu klasē Circle.

10. darbība: Definējiet Circle klases konstruktoru, kas pieņem dubultu rādiusa vērtību.

11. darbība: Ieviesiet metodi getArea klasei Circle, kas aprēķina apļa laukumu.

12. darbība: Definējiet kvadrātveida klasi, kas paplašina formu Shape.

13. darbība: Pasludiniet dubulto mainīgo ar nosaukumu 'side' par aizsargātu Square klasē.

14. darbība: Definējiet kvadrātveida klases konstruktoru, kas pieņem sānu dubulto vērtību.

15. darbība: Ieviesiet metodi getArea kvadrātveida klasei, kas aprēķina kvadrāta laukumu.

16. darbība: Definējiet galveno klasi.

17. darbība: Definējiet galveno funkciju galvenajā klasē.

18. darbība: Izveidojiet apļa objektu un kvadrātveida objektu.

19. darbība: Izsauciet metodi setPosition gan apļa, gan kvadrātveida objektiem.

20. darbība: Izsauciet metodi getArea gan apļa, gan kvadrātveida objektiem un izdrukājiet rezultātus.

21. darbība: Izsauciet metodi printPosition gan apļa, gan kvadrātveida objektiem un izdrukājiet rezultātus.

Īstenošana:

Šeit ir aprakstīta iepriekš minēto darbību īstenošana

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

Izvade:

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

2. Parametrizēts konstruktors: Veidojot objektu, šāda veida konstruktors ļauj tam nodot argumentus. Ja vēlaties inicializēt objektu ar vērtībām, tas ir noderīgi. Parametrētais konstruktors tiek definēts ar vienu vai papildu parametriem, un, kamēr objekts tiek izveidots, konstruktoram nodotās vērtības tiek izmantotas, lai inicializētu atbilstošos vienuma laukus.

ALGORITMS:

iegūstiet masīva garumu c

1. darbība: Definējiet abstraktu klasi Shape.

2. darbība: Pievienojiet divus aizsargātus int tipa mainīgos ar nosaukumu x un y.

3. darbība: Izveidojiet parametrizētu konstruktoru, kas inicializē instanču mainīgos x un y un pieņem divus int tipa parametrus, x un y.

4. darbība: Definējiet abstraktu klasi Shape.

5. darbība: Pievienojiet divus aizsargātus int tipa mainīgos ar nosaukumu x un y.

6. darbība: Izveidojiet parametrizētu konstruktoru, kas inicializē instanču mainīgos x un y un pieņem divus int tipa parametrus, x un y.

7. darbība: Definējiet klases apli, kas paplašina formu.

8. darbība: Pievienojiet aizsargātu instances mainīgo tipa dubultnosaukumu rādiuss.

9. darbība: Definējiet parametrizētu konstruktoru, kas ņem trīs int x, y un dubultā rādiusa tipa parametrus un inicializē x, y un rādiusa gadījumu mainīgos, izmantojot atslēgvārdu super().

10. darbība: Īstenojiet abstrakto metodi getArea(), aprēķinot apļa laukumu.

11. darbība: Definējiet klases kvadrātu, kas paplašina formu.

12. darbība: Pievienojiet aizsargātu instances mainīgo tipu ar dubultu nosaukumu side.

13. darbība: Definējiet parametrizētu konstruktoru, kas ņem trīs parametrus tipa int x, y un double side un inicializē x, y un sānu instances mainīgos, izmantojot atslēgvārdu super().

14. darbība: Ieviesiet abstrakto metodi getArea(), aprēķinot kvadrāta laukumu.

15. darbība: Definējiet klasi Galvenā.

16. darbība: Definējiet statisku metodi ar nosaukumu main(), kas ir programmas ieejas punkts.

17. darbība: Izveidojiet Circle objektu, izmantojot parametrizētu konstruktoru.

18. darbība: Izdrukājiet apļa objekta apgabalu un pozīciju, izmantojot attiecīgi metodes getArea() un printPosition().

19. darbība: Izveidojiet kvadrātveida objektu, izmantojot parametrizētu konstruktoru.

20. darbība: Drukājiet kvadrātveida objekta apgabalu un pozīciju, izmantojot attiecīgi metodes getArea() un printPosition().

21. darbība: Programmas beigas.

Īstenošana:

Iepriekš minēto darbību īstenošana

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

Izvade:

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

3. Kopēšanas konstruktors: kopijas konstruktors tiek izmantots, lai izveidotu jaunu objektu ar vienādām vērtībām kā esošam objektam (t.i., vienums ir izveidots agrāk nekā). Tas ir noderīgi, kamēr mums ir jāizveido jauns objekts, kas varētu būt jau esoša/pastāvoša objekta kopija. Kopēšanas konstruktors ir definēts tikai ar vienu argumentu vai vienu parametru, kas ir identiskas klases vienums. Pēc tam konstruktors izveido jaunu objektu ar tādām pašām vērtībām kā parametru objektam.

ALGORITMS:

1. darbība: Deklarējiet abstraktu klasi ar gadījumu mainīgajiem un noklusējuma konstruktoru.

2. darbība: Definējiet kopijas konstruktoru ar identiska klases tipa parametru.

3. darbība: Kopiju konstruktorā izsauciet virsklases kopiju konstruktoru, izmantojot super atslēgvārdu, lai kopētu gadījumu mainīgos no parametra objekta uz jauno objektu.

4. darbība: Piešķiriet jaunajam vienumam jebkuru papildu gadījumu mainīgo vērtības apakšklasē.

5. darbība: Lai aprēķinātu laukumu, izmantojiet abstrakto metodi.

6. darbība: Ja nepieciešams, definējiet citas metodes.

7. darbība: Galvenajā funkcijā izveidojiet klases objektu.

8. darbība: Ja nepieciešams, iestatiet pozīciju un visus citus gadījumu mainīgos.

9. darbība: Izveidojiet jaunu objektu, izmantojot kopēšanas konstruktoru un kā parametru nododot sākotnējo vienumu.

10. darbība: Drukājiet gan oriģinālā, gan kopētā objekta laukumu un pozīciju.

Īstenošana:

Iepriekš minēto darbību īstenošana ir norādīta zemāk

Faila nosaukums: CopyMain.java

pārslēgt java programmēšanu
 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(); } } 

Izvade:

 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)