Apstraktna klasa u Javi je klasa koja se ne može izravno instancirati. Cilj ovoga je djelovati kao osnovna klasa od koje druge klase mogu naslijeđivati i proširivati. Jedna od važnih značajki je da apstraktna klasa ima sposobnost definiranja konstruktora, koji su poznati kao posebne metode i koje se pozivaju kada se kreira objekt klase.
slučajni broj gen java
Pravila kojih se treba pridržavati prilikom definiranja konstruktora u apstraktnoj klasi:
- Apstraktne klase mogu imati konstruktore, ali se ne mogu izravno instancirati. Konstruktori se koriste kada se kreira konkretna podklasa.
- U apstraktnoj klasi može postojati jedna ili više apstraktnih metoda, što znači da te metode nisu implementirane pomoću klase. Da bi bila instancirana, podklasa koja proširuje apstraktnu klasu apstraktnim metodama treba implementirati metode. To znači da svaka apstraktna metoda deklarirana unutar apstraktne klase mora imati implementaciju ako podklasa treba biti konkretna klasa i da se može instancirati. Drugim riječima, funkcionalnost koju je apstraktna klasa ostavila otvorenom mora ispuniti podklasa.
- Kada podklasa proširuje apstraktnu klasu s konstruktorima, podklasa treba pozvati jedan od konstruktora unutar superklase uz pomoć ključne riječi super. Budući da konstruktor superklase inicijalizira stanje objekta i objedinjuje sve vitalne resurse. Ako podklasa sada ne pozove jedan od konstruktora u superklasi, objekt neće biti dobro inicijaliziran i sada neće funkcionirati učinkovito/ispravno.
- Izvedivo je definirati više od jednog konstruktora u apstraktnoj klasi, slično nekoj drugoj klasi. Međutim, svaki konstruktor mora biti definiran različitim popisom parametara. Omogućuje potklasama da izaberu koji će konstruktor pozvati na temelju svojih specifičnih potreba.
Vrste konstruktora implementiranih pomoću apstraktne klase:
Postoje tri vrste konstruktora:
- Zadani konstruktor
- Parametrirani konstruktor
- Konstruktor kopiranja
1. Zadani konstruktor: Konstruktor se automatski kreira putem Jave ako nijedan drugi konstruktor nije definiran u klasi. Nema parametara i ne izvodi nikakve poteze osim inicijalizacije zadanih vrijednosti za polja klase.
ALGORITAM:
Korak 1: Definirajte apstraktnu klasu pod nazivom 'Oblik'.
Korak 2: Proglasite dvije cjelobrojne varijable 'x' i 'y' kao zaštićene.
Korak 3: Napravite zadani konstruktor klase Shape i postavite 'x' i 'y' na 0.
Korak 4: Sada stvorite metodu 'getArea()', to je apstraktna metoda koja će vratiti dvostruku vrijednost
Korak 5: Zatim kreirajte dvije neapstraktne metode 'printPosition()' i 'setPosition(int x, int y)' koje pripadaju klasi Shape.
Korak 6: Metoda setPosition postavlja vrijednosti x i y.
Korak 7: Metoda printPosition ispisuje vrijednosti x i y.
Korak 8: Definirajte klasu Circle koja proširuje klasu Shape.
Korak 9: Deklarirajte dvostruku varijablu pod nazivom 'radius' kao zaštićenu u klasi Circle.
Korak 10: Definirajte konstruktor za klasu Circle koji prihvaća dvostruku vrijednost za polumjer.
Korak 11: Implementirajte metodu getArea za klasu Circle koja izračunava površinu kruga.
Korak 12: Definirajte klasu Square koja proširuje klasu Shape.
Korak 13: Deklarirajte dvostruku varijablu pod nazivom 'strana' kao zaštićenu u klasi Square.
Korak 14: Definirajte konstruktor za klasu Square koji prihvaća dvostruku vrijednost za stranicu.
Korak 15: Implementirajte metodu getArea za klasu Square koja izračunava površinu kvadrata.
Korak 16: Definirajte glavnu klasu.
Korak 17: Definirajte glavnu funkciju u klasi Main.
Korak 18: Napravite objekt Circle i Square.
Korak 19: Pozovite metodu setPosition za objekte Circle i Square.
Korak 20: Pozovite metodu getArea za objekte Circle i Square i ispišite rezultate.
Korak 21: Pozovite metodu printPosition za objekte Circle i Square i ispišite rezultate.
Implementacija:
Ovdje je implementacija gornjih koraka
Naziv 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(); } }
Izlaz:
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: Kada stvarate objekt, ova vrsta konstruktora omogućuje vam da mu proslijedite argumente. Kada želite inicijalizirati objekt s vrijednostima, to je od pomoći. Parametrizirani konstruktor definiran je s jednim ili dodatnim parametrima, a dok se objekt stvara, vrijednosti proslijeđene konstruktoru koriste se za inicijalizaciju odgovarajućih polja stavke.
ALGORITAM:
Korak 1: Definirajte apstraktnu klasu Shape.
Korak 2: Dodajte dvije zaštićene varijable instance tipa int pod nazivom x i y.
Korak 3: Napravite parametrizirani konstruktor koji inicijalizira varijable instance x i y i prihvaća dva parametra tipa int, x i y.
Korak 4: Definirajte apstraktnu klasu Shape.
Korak 5: Dodajte dvije zaštićene varijable instance tipa int pod nazivom x i y.
Korak 6: Napravite parametrizirani konstruktor koji inicijalizira varijable instance x i y i prihvaća dva parametra tipa int, x i y.
Korak 7: Definirajte klasu Circle koja proširuje Shape.
Korak 8: Dodajte zaštićenu varijablu instance tipa duplog naziva radijus.
Korak 9: Definirajte parametrizirani konstruktor koji uzima tri parametra tipa int x, y i dvostruki radijus i inicijalizira varijable instance x, y i radijus pomoću ključne riječi super().
Korak 10: Implementirajte apstraktnu metodu getArea() izračunavanjem površine kruga.
Korak 11: Definirajte klasu Square koja proširuje Shape.
Korak 12: Dodajte zaštićenu varijablu instance tipa dvostruko imenovane strane.
Korak 13: Definirajte parametrizirani konstruktor koji uzima tri parametra tipa int x, y i dvostruku stranu i inicijalizira varijable instance x, y i stranu koristeći ključnu riječ super().
Korak 14: Implementirajte apstraktnu metodu getArea() izračunavanjem površine kvadrata.
Korak 15: Definirajte klasu Main.
Korak 16: Definirajte statičku metodu pod nazivom main() koja je ulazna točka programa.
Korak 17: Stvorite objekt Circle pomoću parametriranog konstruktora.
Korak 18: Ispišite površinu i položaj objekta Circle pomoću metoda getArea() i printPosition().
Korak 19: Stvorite kvadratni objekt pomoću parametriziranog konstruktora.
Korak 20: Ispišite površinu i položaj kvadratnog objekta korištenjem metoda getArea() i printPosition().
Korak 21: Kraj programa.
Implementacija:
Diana Mary Blacker
Provedba gore navedenih koraka navedena je u nastavku
Naziv 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(); } }
Izlaz:
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 koristi se za stvaranje novog objekta s jednakim vrijednostima kao postojeći objekt (tj. stavka je stvorena prije). Korisno je kada trebamo stvoriti novi objekt koji može biti replika objekta koji je već prisutan/postojao. Konstruktor kopije je definiran sa samo jednim argumentom ili jednim parametrom koji je stavka identične klase. Tada konstruktor stvara novi objekt s istim vrijednostima kao objekt parametra.
ALGORITAM:
Korak 1: Deklarirajte apstraktnu klasu s varijablama instance i zadanim konstruktorom.
Korak 2: Definirajte konstruktor kopije s parametrom identičnog tipa klase.
Korak 3: U konstruktoru kopiranja pozovite konstruktor kopiranja nadklase koristeći ključnu riječ super za kopiranje varijabli instance iz objekta parametra u novi objekt.
Korak 4: Novoj stavci dodijelite vrijednosti svih dodatnih varijabli instance unutar potklase.
Korak 5: Implementirajte apstraktnu metodu za izračunavanje površine.
Korak 6: Po potrebi definirajte sve druge metode.
Korak 7: U glavnoj funkciji kreirajte objekt klase.
Korak 8: Po potrebi postavite položaj i sve druge varijable instance.
Korak 9: Stvorite novi objekt korištenjem konstruktora kopiranja i prosljeđivanjem izvorne stavke kao parametra.
Korak 10: Ispišite područje i položaj izvornih i kopiranih objekata.
Implementacija:
Implementacija gornjih koraka navedena je u nastavku
Naziv datoteke: KopirajMain.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(); } }
Izlaz:
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)