Abstraktní třída v Javě je třída, kterou nelze vytvořit přímo. Cílem je fungovat jako základní třída, ze které mohou být zděděny a rozšířeny ostatní třídy. Jednou z důležitých vlastností abstraktní třídy je schopnost definovat konstruktory, které jsou známé jako speciální metody a které se vyvolávají při vytvoření objektu třídy.
Pravidla, která se mají dodržovat při definování konstruktorů v abstraktní třídě:
- Abstraktní třídy mohou mít konstruktory, ale nelze je vytvářet přímo. Konstruktory se používají při vytváření konkrétní podtřídy.
- V abstraktní třídě může být jedna nebo více abstraktních metod, což znamená, že tyto metody nejsou implementovány prostřednictvím této třídy. Aby byla vytvořena instance, podtřída, která rozšiřuje abstraktní třídu o abstraktní metody, by měla tyto metody implementovat. Znamená to, že každá abstraktní metoda deklarovaná v rámci abstraktní třídy musí mít implementaci, pokud podtřída musí být konkrétní třídou a musí být možné vytvořit instanci. Jinými slovy, funkce, které abstraktní třída nechala otevřenou, musí být vyplněna podtřídou.
- Když podtřída rozšiřuje abstraktní třídu o konstruktory, musí podtřída zavolat jeden z konstruktorů uvnitř nadtřídy pomocí super klíčového slova. Protože konstruktor nadtřídy inicializuje stav objektu a sjednocuje všechny životně důležité zdroje. Pokud nyní podtřída nevolá jeden z konstruktorů v nadtřídě, objekt nebude dobře inicializován a nebude nyní fungovat efektivně/správně.
- Je možné definovat více než jeden konstruktor v abstraktní třídě, podobně jako některé jiné třídy. Každý konstruktor však musí být definován s jiným seznamem parametrů. Umožňuje podtřídám vybrat, který konstruktor zavolat na základě jejich specifických potřeb.
Typy konstruktorů implementovaných pomocí abstraktní třídy:
Existují tři typy konstruktorů:
- Výchozí konstruktor
- Parametrizovaný konstruktor
- Kopírovat konstruktor
1. Výchozí konstruktor: Konstruktor je automaticky vytvořen prostřednictvím Java, pokud není ve třídě definován žádný jiný konstruktor. Nemá žádné parametry a neprovádí žádné pohyby kromě inicializace výchozích hodnot pro pole tříd.
ALGORITMUS:
Krok 1: Definujte abstraktní třídu s názvem 'Shape'.
Krok 2: Deklarujte dvě celočíselné proměnné 'x' a 'y' jako chráněné.
Krok 3: Vytvořte výchozí konstruktor třídy Shape a nastavte 'x' a 'y' na 0.
Krok 4: Nyní vytvořte metodu 'getArea()', je to abstraktní metoda, která bude vracet dvojitou hodnotu
Krok 5: Poté vytvořte dvě neabstraktní metody 'printPosition()' a 'setPosition(int x, int y)', které patří do třídy Shape.
Krok 6: Metoda setPosition nastavuje hodnoty x a y.
Krok 7: Metoda printPosition vytiskne hodnoty x a y.
Krok 8: Definujte třídu Circle, která rozšiřuje třídu Shape.
Krok 9: Deklarujte dvojitou proměnnou s názvem 'radius' jako chráněnou ve třídě Circle.
Krok 10: Definujte konstruktor pro třídu Circle, který akceptuje dvojitou hodnotu poloměru.
Krok 11: Implementujte metodu getArea pro třídu Circle, která vypočítá plochu kruhu.
jak odstranit sloupec v postgresql
Krok 12: Definujte třídu Square, která rozšiřuje třídu Shape.
Krok 13: Deklarujte dvojitou proměnnou s názvem 'strana' jako chráněnou ve třídě Square.
Krok 14: Definujte konstruktor pro třídu Square, který přijímá dvojitou hodnotu pro stranu.
Krok 15: Implementujte metodu getArea pro třídu Square, která vypočítá plochu čtverce.
Krok 16: Definujte hlavní třídu.
Krok 17: Definujte hlavní funkci ve třídě Main.
Krok 18: Vytvořte kruhový objekt a čtvercový objekt.
Krok 19: Volejte metodu setPosition pro objekty Circle i Square.
Krok 20: Zavolejte metodu getArea pro objekty Circle i Square a vytiskněte výsledky.
Krok 21: Zavolejte metodu printPosition pro objekty Circle i Square a vytiskněte výsledky.
Implementace:
Zde je implementace výše uvedených kroků
Název souboru: 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ýstup:
Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7)
2. Parametrizovaný konstruktor: Při vytváření objektu vám tento druh konstruktoru umožňuje předat mu argumenty. Když chcete inicializovat objekt s hodnotami, je to užitečné. Parametrizovaný konstruktor je definován jedním nebo extra parametry, a zatímco je vytvořen objekt, hodnoty předané konstruktoru se používají k inicializaci odpovídajících polí položky.
ALGORITMUS:
Krok 1: Definujte abstraktní třídu Shape.
Krok 2: Přidejte dvě chráněné proměnné instance typu int s názvem x a y.
Krok 3: Vytvořte parametrizovaný konstruktor, který inicializuje proměnné instance x a y a přijímá dva parametry typu int, x a y.
Krok 4: Definujte abstraktní třídu Shape.
Krok 5: Přidejte dvě chráněné proměnné instance typu int s názvem x a y.
Krok 6: Vytvořte parametrizovaný konstruktor, který inicializuje proměnné instance x a y a přijímá dva parametry typu int, x a y.
Krok 7: Definujte třídu Circle, která rozšiřuje Shape.
Krok 8: Přidejte proměnnou chráněné instance typu dvojitě pojmenovaná poloměr.
Krok 9: Definujte parametrizovaný konstruktor, který přebírá tři parametry typu int x, y a double radius a inicializuje proměnné instance x, y a radius pomocí klíčového slova super().
Krok 10: Implementujte abstraktní metodu getArea() výpočtem oblasti Circle.
Krok 11: Definujte třídu Square, která rozšiřuje Shape.
Krok 12: Přidejte proměnnou chráněné instance typu dvojitě pojmenovaná strana.
Krok 13: Definujte parametrizovaný konstruktor, který přebírá tři parametry typu int x, y a double side a inicializuje proměnné instance x, y a side pomocí klíčového slova super().
Krok 14: Implementujte abstraktní metodu getArea() výpočtem plochy čtverce.
Krok 15: Definujte třídu Main.
Krok 16: Definujte statickou metodu s názvem main(), která je vstupním bodem programu.
Krok 17: Vytvořte objekt Circle pomocí parametrizovaného konstruktoru.
Krok 18: Vytiskněte oblast a polohu objektu Circle pomocí metod getArea() a printPosition().
Krok 19: Vytvořte čtvercový objekt pomocí parametrizovaného konstruktoru.
Krok 20: Vytiskněte oblast a polohu objektu Square pomocí metod getArea() a printPosition().
Krok 21: Konec programu.
Implementace:
Provedení výše uvedených kroků uvedených níže
Název souboru: ParametrizedMain.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ýstup:
Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7)
3. Kopírovat konstruktor: kopírovací konstruktor se používá k vytvoření nového objektu se stejnými hodnotami jako existující objekt (tj. položka je vytvořena dříve než). Je to užitečné, když potřebujeme vytvořit nový objekt, který může být replikou objektu, který již existuje/existuje. Kopírovací konstruktor je definován pouze jedním argumentem nebo jedním parametrem, který je položkou stejné třídy. Potom konstruktor vytvoří nový objekt se stejnými hodnotami jako objekt parametru.
ALGORITMUS:
Krok 1: Deklarujte abstraktní třídu s proměnnými instance a výchozím konstruktorem.
Krok 2: Definujte konstruktor kopírování s parametrem identického typu třídy.
Krok 3: V konstruktoru kopírování zavolejte konstruktor kopírování nadtřídy pomocí klíčového slova super ke zkopírování proměnných instance z objektu parametru do nového objektu.
Krok 4: Přiřaďte nové položce hodnoty všech dalších proměnných instance v rámci podtřídy.
Krok 5: Pro výpočet plochy implementujte abstraktní metodu.
Krok 6: Podle potřeby definujte další metody.
Krok 7: Ve funkci main vytvořte objekt třídy.
Krok 8: Podle potřeby nastavte pozici a jakékoli další proměnné instance.
Krok 9: Vytvořte nový objekt pomocí konstruktoru kopírování a předáním původní položky jako parametru.
Krok 10: Vytiskněte oblast a polohu původních i zkopírovaných objektů.
Implementace:
Implementace výše uvedených kroků je uvedena níže
Název souboru: 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ýstup:
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)