Abstraktná trieda v jazyku Java je trieda, ktorá nemôže byť vytvorená priamo. Cieľom je pôsobiť ako základná trieda, z ktorej môžu dediť a rozširovať ostatné triedy. Jednou z dôležitých funkcií je, že abstraktná trieda má schopnosť definovať konštruktory, ktoré sú známe ako špeciálne metódy a ktoré sa vyvolávajú pri vytváraní objektu triedy.
Pravidlá, ktoré sa majú dodržiavať pri definovaní konštruktorov v abstraktnej triede:
- Abstraktné triedy môžu mať konštruktory, ale nemožno ich vytvárať priamo. Konštruktory sa používajú pri vytváraní konkrétnej podtriedy.
- V abstraktnej triede môže byť jedna alebo viac abstraktných metód, čo znamená, že tieto metódy nie sú implementované prostredníctvom triedy. Aby sa vytvorila inštancia, podtrieda, ktorá rozširuje abstraktnú triedu o abstraktné metódy, by mala tieto metódy implementovať. Znamená to, že každá abstraktná metóda deklarovaná v rámci abstraktnej triedy musí mať implementáciu, ak podtrieda musí byť konkrétnou triedou a musí byť možné vytvoriť inštanciu. Inými slovami, funkčnosť, ktorú abstraktná trieda nechala otvorenú, musí vyplniť podtrieda.
- Keď podtrieda rozširuje abstraktnú triedu o konštruktory, podtrieda potrebuje zavolať jeden z konštruktorov v rámci nadtriedy pomocou super kľúčového slova. Pretože konštruktor nadtriedy inicializuje stav objektu a zjednocuje všetky životne dôležité zdroje. Ak podtrieda teraz nevolá jeden z konštruktorov v nadtriede, objekt nebude dobre inicializovaný a nebude fungovať efektívne/správne.
- Je možné definovať viac ako jeden konštruktor v abstraktnej triede, podobne ako v inej triede. Každý konštruktor však musí byť definovaný s iným zoznamom parametrov. Umožňuje podtriedam vybrať si, ktorý konštruktor zavolať na základe ich špecifických potrieb.
Typy konštruktérov implementovaných pomocou abstraktnej triedy:
Existujú tri typy konštruktérov, a to:
- Predvolený konštruktor
- Parametrizovaný konštruktor
- Kopírovať konštruktor
1. Predvolený konštruktor: Konštruktor sa automaticky vytvorí cez Java, ak v triede nie je definovaný žiadny iný konštruktor. Nemá žiadne parametre a nevykonáva žiadne pohyby okrem inicializácie predvolených hodnôt pre polia tried.
ALGORITHM:
Krok 1: Definujte abstraktnú triedu s názvom 'Shape'.
Krok 2: Deklarujte dve celočíselné premenné „x“ a „y“ ako chránené.
Krok 3: Vytvorte predvolený konštruktor triedy Shape a nastavte „x“ a „y“ na 0.
Krok 4: Teraz vytvorte metódu 'getArea()', je to abstraktná metóda, ktorá vráti dvojitú hodnotu
Krok 5: Potom vytvorte dve neabstraktné metódy 'printPosition()' a 'setPosition(int x, int y)', ktoré patria do triedy Shape.
Krok 6: Metóda setPosition nastavuje hodnoty x a y.
Krok 7: Metóda printPosition vytlačí hodnoty x a y.
Krok 8: Definujte triedu Circle, ktorá rozširuje triedu Shape.
Krok 9: Deklarujte dvojitú premennú s názvom 'radius' ako chránenú v triede Circle.
Krok 10: Definujte konštruktor pre triedu Circle, ktorý akceptuje dvojitú hodnotu pre polomer.
Krok 11: Implementujte metódu getArea pre triedu Circle, ktorá vypočíta plochu kruhu.
Krok 12: Definujte triedu Square, ktorá rozširuje triedu Shape.
Krok 13: Deklarujte dvojitú premennú s názvom „strana“ ako chránenú v triede Square.
Krok 14: Definujte konštruktor pre triedu Square, ktorý akceptuje dvojitú hodnotu pre stranu.
Krok 15: Implementujte metódu getArea pre triedu Square, ktorá vypočíta plochu štvorca.
Krok 16: Definujte hlavnú triedu.
Krok 17: Definujte hlavnú funkciu v triede Main.
Krok 18: Vytvorte kruhový objekt a štvorcový objekt.
pvr plná forma
Krok 19: Zavolajte metódu setPosition pre objekty Circle aj Square.
Krok 20: Zavolajte metódu getArea pre objekty Circle aj Square a vytlačte výsledky.
Krok 21: Zavolajte metódu printPosition pre objekty Circle aj Square a vytlačte výsledky.
Implementácia:
Tu je implementácia vyššie uvedených krokov
Názov súboru: 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(); } }
Výkon:
Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7)
2. Parametrizovaný konštruktor: Pri vytváraní objektu vám tento druh konštruktora umožňuje odovzdať mu argumenty. Keď chcete inicializovať objekt s hodnotami, je to užitočné. Parametrizovaný konštruktor je definovaný s jedným alebo extra parametrami a kým sa vytvorí objekt, hodnoty odovzdané konštruktoru sa použijú na inicializáciu zodpovedajúcich polí položky.
ALGORITHM:
Krok 1: Definujte abstraktnú triedu Shape.
„čo je 10 zo 100“
Krok 2: Pridajte dve chránené premenné inštancie typu int s názvom x a y.
Krok 3: Vytvorte parametrizovaný konštruktor, ktorý inicializuje premenné inštancie x a y a akceptuje dva parametre typu int, x a y.
Krok 4: Definujte abstraktnú triedu Shape.
Krok 5: Pridajte dve chránené premenné inštancie typu int s názvom x a y.
Krok 6: Vytvorte parametrizovaný konštruktor, ktorý inicializuje premenné inštancie x a y a akceptuje dva parametre typu int, x a y.
Krok 7: Definujte triedu Kruh, ktorá rozširuje tvar.
Krok 8: Pridajte chránenú premennú inštancie typu s dvojitým názvom polomer.
Krok 9: Definujte parametrizovaný konštruktor, ktorý preberá tri parametre typu int x, y a double radius a inicializuje premenné inštancie x, y a radius pomocou kľúčového slova super().
Krok 10: Implementujte abstraktnú metódu getArea() výpočtom plochy kruhu.
Krok 11: Definujte triedu Square, ktorá rozširuje Shape.
Krok 12: Pridajte chránenú premennú inštancie typu dvojito pomenovaná strana.
Krok 13: Definujte parametrizovaný konštruktor, ktorý prevezme tri parametre typu int x, y a double side a inicializuje premenné x, y a bočné inštancie pomocou kľúčového slova super().
Krok 14: Implementujte abstraktnú metódu getArea() výpočtom plochy štvorca.
Krok 15: Definujte triedu Main.
Krok 16: Definujte statickú metódu s názvom main(), ktorá je vstupným bodom programu.
Krok 17: Vytvorte objekt Circle pomocou parametrizovaného konštruktora.
Krok 18: Vytlačte oblasť a polohu objektu Circle pomocou metód getArea() a printPosition().
Krok 19: Vytvorte štvorcový objekt pomocou parametrizovaného konštruktora.
Krok 20: Vytlačte oblasť a polohu objektu Square pomocou metód getArea() a printPosition().
Krok 21: Koniec programu.
Implementácia:
Implementácia vyššie uvedených krokov uvedených nižšie
Názov súboru: 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(); } }
Výkon:
Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7)
3. Kopírovať konštruktor: kopírovací konštruktor sa používa na vytvorenie nového objektu s rovnakými hodnotami ako existujúci objekt (t. j. položka je vytvorená skôr ako). Je to užitočné, keď potrebujeme vytvoriť nový objekt, ktorý môže byť replikou objektu, ktorý už je prítomný/existujúci. Kopírovať konštruktor je definovaný iba s jedným argumentom alebo jedným parametrom, ktorý je položkou identickej triedy. Potom konštruktor vytvorí nový objekt s rovnakými hodnotami ako objekt parametra.
ALGORITHM:
Krok 1: Deklarujte abstraktnú triedu s premennými inštancie a predvoleným konštruktorom.
Krok 2: Definujte konštruktor kópie s parametrom rovnakého typu triedy.
string.format v jave
Krok 3: V konštruktore kopírovania zavolajte konštruktor kopírovania nadtriedy pomocou kľúčového slova super na skopírovanie premenných inštancie z objektu parametra do nového objektu.
Krok 4: Priraďte hodnoty všetkých premenných inštancií navyše v rámci podtriedy k novej položke.
Krok 5: Implementujte abstraktnú metódu na výpočet plochy.
Krok 6: Podľa potreby definujte ďalšie metódy.
Krok 7: V hlavnej funkcii vytvorte objekt triedy.
Krok 8: Podľa potreby nastavte polohu a akékoľvek ďalšie premenné inštancie.
Krok 9: Vytvorte nový objekt pomocou konštruktora kopírovania a odovzdaním pôvodnej položky ako parametra.
Krok 10: Vytlačte oblasť a polohu pôvodných aj skopírovaných objektov.
Implementácia:
Implementácia vyššie uvedených krokov je uvedená nižšie
Názov súboru: 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(); } }
Výkon:
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)