A Java absztrakt osztálya olyan osztály, amelyet nem lehet közvetlenül példányosítani. Ennek az a célja, hogy alaposztályként működjön, amelyből a többi osztály örökölhet és kibővülhet. Az egyik fontos tulajdonság, hogy egy absztrakt osztály képes meghatározni a konstruktorokat, amelyeket speciális metódusoknak nevezünk, és amelyek meghívódnak egy osztály objektumának létrehozásakor.
A konstruktorok absztrakt osztályban történő meghatározásakor követendő szabályok:
- Az absztrakt osztályoknak lehetnek konstruktorai, de közvetlenül nem példányosíthatók. A konstruktorokat konkrét alosztály létrehozásakor használjuk.
- Egy absztrakt osztályban lehet egy vagy több absztrakt metódus, ami azt jelenti, hogy ezeket a metódusokat nem az osztály segítségével valósítják meg. A példányosításhoz egy absztrakt osztályt absztrakt metódusokkal bővítő alosztálynak kell megvalósítania a metódusokat. Ez azt jelenti, hogy minden absztrakt osztályon belül deklarált absztrakt metódusnak implementációval kell rendelkeznie, ha egy alosztálynak konkrét osztálynak kell lennie, és példányosíthatónak kell lennie. Más szóval, azt a funkcionalitást, amelyet az absztrakt osztály nyitva hagyott, az alosztálynak kell kitöltenie.
- Amikor egy alosztály egy absztrakt osztályt konstruktorokkal bővít ki, az alosztálynak meg kell hívnia a szuperosztályon belüli konstruktorok egyikét egy szuper kulcsszó segítségével. Mivel a szuperosztály-konstruktor inicializálja az objektum állapotát, és egyesíti az összes létfontosságú erőforrást. Ha az alosztály most nem hívja meg a szuperosztály egyik konstruktorát, az objektum nem lesz megfelelően inicializálva, és nem fog hatékonyan/helyesen működni.
- Egy absztrakt osztályban egynél több konstruktort is definiálhatunk, hasonlóan néhány más osztályhoz. Azonban minden konstruktort más paraméterlistával kell definiálni. Lehetővé teszi az alosztályok számára, hogy kiválasszák, melyik konstruktort hívják meg sajátos igényeik alapján.
Az Abstract Class használatával megvalósított konstruktorok típusai:
Háromféle konstruktor létezik:
- Alapértelmezett konstruktor
- Paraméterezett konstruktor
- Copy Constructor
1. Alapértelmezett konstruktor: A konstruktor automatikusan létrejön a Java-n keresztül, ha nincs más konstruktor definiálva az osztályban. Nincsenek paraméterei, és nem hajt végre semmilyen lépést az osztálymezők alapértelmezett értékeinek inicializálásán kívül.
ALGORITMUS:
java programozás váltása
1. lépés: Határozzon meg egy „Alak” nevű absztrakt osztályt.
2. lépés: Két egész változót, 'x' és 'y' nyilvánítson védettnek.
3. lépés: Hozzon létre egy Shape osztály alapértelmezett konstruktort, és állítsa az „x” és „y” értéket 0-ra.
4. lépés: Most hozzon létre egy 'getArea()' metódust, ez egy absztrakt metódus, amely dupla értéket ad vissza
5. lépés: Ezután hozzon létre két nem absztrakt metódust: 'printPosition()' és 'setPosition(int x, int y)', amelyek a Shape osztályba tartoznak.
6. lépés: A setPosition metódus beállítja x és y értékét.
7. lépés: A printPosition metódus kiírja x és y értékeit.
8. lépés: Határozzon meg egy Circle osztályt, amely kiterjeszti a Shape osztályt.
9. lépés: Deklaráljunk egy 'sugár' nevű kettős változót védettnek a Circle osztályban.
10. lépés: Határozzon meg egy konstruktort a Circle osztályhoz, amely a sugár dupla értékét fogadja el.
11. lépés: Valósítsa meg a getArea metódust a Circle osztályhoz, amely kiszámítja a kör területét.
12. lépés: Határozzon meg egy négyzet osztályt, amely kiterjeszti a Shape osztályt.
13. lépés: Deklaráljunk egy 'oldal' nevű kettős változót védettnek a Square osztályban.
14. lépés: Határozzon meg egy konstruktort a Square osztályhoz, amely elfogadja az oldal kétszeres értékét.
java részstring tartalmazza
15. lépés: Valósítsa meg a getArea metódust a Négyzet osztályhoz, amely kiszámítja a négyzet területét.
16. lépés: Határozzon meg egy fő osztályt.
17. lépés: Határozza meg a fő funkciót a Main osztályban.
18. lépés: Hozzon létre egy kör objektumot és egy négyzet alakú objektumot.
19. lépés: Hívja meg a setPosition metódust mind a Circle, mind a Square objektumokhoz.
20. lépés: Hívja meg a getArea metódust mind a Circle, mind a Square objektumokhoz, és nyomtassa ki az eredményeket.
21. lépés: Hívja meg a printPosition metódust mind a Circle, mind a Square objektumokhoz, és nyomtassa ki az eredményeket.
Végrehajtás:
Íme a fenti lépések végrehajtása
Fájl név: 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(); } }
Kimenet:
Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7)
2. Paraméteres konstruktor: Egy objektum létrehozásakor ez a fajta konstruktor lehetővé teszi, hogy argumentumokat adjon át neki. Ha értékekkel kívánja inicializálni az objektumot, ez hasznos. A paraméterezett konstruktor egy vagy további paraméterekkel van definiálva, és az objektum létrehozása során a konstruktornak átadott értékek az elem megfelelő mezőinek inicializálására szolgálnak.
szkriptek futtatása linux alatt
ALGORITMUS:
1. lépés: Határozzon meg egy absztrakt osztályt Alakzat.
2. lépés: Adjon hozzá két, x és y nevű int típusú védett példányváltozót.
3. lépés: Hozzon létre egy paraméterezett konstruktort, amely inicializálja az x és y példányváltozókat, és elfogad két int típusú paramétert, az x-et és az y-t.
4. lépés: Határozzon meg egy absztrakt osztályt Alakzat.
5. lépés: Adjon hozzá két, x és y nevű int típusú védett példányváltozót.
6. lépés: Hozzon létre egy paraméterezett konstruktort, amely inicializálja az x és y példányváltozókat, és elfogad két int típusú paramétert, az x-et és az y-t.
7. lépés: Határozzon meg egy kör osztályt, amely kiterjeszti az alakzatot.
8. lépés: Adjon hozzá egy dupla nevű sugár típusú védett példányváltozót.
9. lépés: Határozzon meg egy paraméterezett konstruktort, amely három int x, y és double radius típusú paramétert vesz fel, és inicializálja az x, y és sugár példányváltozókat a super() kulcsszó használatával.
10. lépés: Valósítsa meg a getArea() absztrakt metódust a Circle területének kiszámításával.
11. lépés: Határozzon meg egy négyzet osztályt, amely kiterjeszti az Alakzatot.
12. lépés: Adjon hozzá egy dupla nevű oldal típusú védett példányváltozót.
13. lépés: Határozzon meg egy paraméterezett konstruktort, amely három int x, y és double side típusú paramétert vesz fel, és inicializálja az x, y és oldalsó példányváltozókat a super() kulcsszó használatával.
14. lépés: Valósítsa meg a getArea() absztrakt metódust a négyzet területének kiszámításával.
15. lépés: Határozzon meg egy fő osztályt.
16. lépés: Határozzon meg egy main() nevű statikus metódust, amely a program belépési pontja.
17. lépés: Hozzon létre egy Circle objektumot paraméterezett konstruktor segítségével.
18. lépés: Nyomtassa ki a Circle objektum területét és pozícióját a getArea() és printPosition() metódusokkal.
19. lépés: Hozzon létre egy négyzet alakú objektumot paraméterezett konstruktor segítségével.
20. lépés: Nyomtassa ki a négyzet alakú objektum területét és pozícióját a getArea() és printPosition() metódusokkal.
21. lépés: A program vége.
Végrehajtás:
Az alábbiakban említett fenti lépések végrehajtása
java névtelen függvény
Fájl név: 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(); } }
Kimenet:
Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7)
3. Másolás konstruktor: A copy konstruktor egy új objektum létrehozására szolgál, amelynek értéke megegyezik egy meglévő objektummal (azaz az elem korábban jön létre). Hasznos, ha új objektumot kell létrehoznunk, amely egy már meglévő/létező objektum másolata lehet. A Copy konstruktor csak egy argumentummal vagy paraméterrel van definiálva, amely azonos osztályba tartozik. Ezután a konstruktor új objektumot hoz létre ugyanazokkal az értékekkel, mint egy paraméterobjektum.
ALGORITMUS:
1. lépés: Egy absztrakt osztály deklarálása példányváltozókkal és alapértelmezett konstruktorral.
string csereall java
2. lépés: Határozzon meg egy másoláskonstruktort egy azonos osztálytípusú paraméterrel.
3. lépés: A másoláskonstruktorban hívja meg a szuperosztályú másoláskonstruktort a szuper kulcsszó használatával, hogy a példányváltozókat a paraméterobjektumból az új objektumba másolja.
4. lépés: Rendelje hozzá az alosztályon belüli extra példányváltozók értékét az új elemhez.
5. lépés: Alkalmazza az absztrakt módszert a terület kiszámításához.
6. lépés: Szükség szerint határozzon meg minden egyéb módszert.
7. lépés: A fő függvényben hozzon létre egy objektumot az osztályból.
8. lépés: Szükség szerint állítsa be a pozíciót és a többi példányváltozót.
9. lépés: Hozzon létre egy új objektumot a másolás konstruktor használatával, és paraméterként adja át az eredeti elemet.
10. lépés: Nyomtassa ki mind az eredeti, mind a másolt objektum területét és pozícióját.
Végrehajtás:
A fenti lépések végrehajtását az alábbiakban mutatjuk be
Fájl név: 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(); } }
Kimenet:
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)