Abstract-luokka Javassa on luokka, jota ei voi ilmentää suoraan. Tämän tavoitteena on toimia perusluokkana, josta muut luokat voivat periytyä ja laajentaa. Yksi tärkeimmistä ominaisuuksista on se, että abstraktilla luokalla on kyky määritellä konstruktorit, jotka tunnetaan erikoismenetelminä ja joita kutsutaan, kun luokan objekti luodaan.
Säännöt, joita on noudatettava määritettäessä konstruktoreita abstraktissa luokassa:
- Abstrakteilla luokilla voi olla rakentajia, mutta niitä ei voi ilmentää suoraan. Konstruktoreita käytetään, kun luodaan konkreettinen alaluokka.
- Abstraktissa luokassa voi olla yksi tai useampi abstrakti menetelmä, mikä tarkoittaa, että näitä menetelmiä ei ole toteutettu luokan avulla. Instantoituakseen aliluokan, joka laajentaa abstraktia luokkaa abstrakteilla menetelmillä, tulisi toteuttaa menetelmät. Se tarkoittaa, että jokaisella abstraktissa luokassa ilmoitetulla abstraktilla menetelmällä on oltava toteutus, jos aliluokan on oltava konkreettinen luokka ja se on kyettävä ilmentymään. Toisin sanoen aliluokan on täytettävä se toiminnallisuus, jonka abstrakti luokka jätti avoimeksi.
- Kun alaluokka laajentaa abstraktia luokkaa konstruktoreilla, alaluokan on kutsuttava yksi superluokan sisällä olevista konstruktoreista superavainsanan avulla. Koska superluokan konstruktori alustaa objektin tilan ja yhdistää kaikki elintärkeät resurssit. Jos alaluokka ei nyt kutsu yhtäkään superluokan konstruktoreita, objektia ei ole alustettu hyvin eikä se nyt toimi tehokkaasti/oikein.
- Abstraktissa luokassa on mahdollista määritellä useampi kuin yksi konstruktori, kuten jokin muu luokka. Jokainen konstruktori on kuitenkin määritettävä eri parametriluettelolla. Sen avulla alaluokat voivat valita, mitä rakentajaa kutsua heidän erityistarpeidensa perusteella.
Abstract Class -luokan avulla toteutettujen konstruktorien tyypit:
Rakentajia on kolmea tyyppiä:
- Oletuskonstruktori
- Parametrisoitu rakentaja
- Kopioi rakentaja
1. Oletuskonstruktori: Konstruktori luodaan automaattisesti Javan kautta, jos luokassa ei ole määritetty muuta konstruktoria. Sillä ei ole parametreja, eikä se suorita mitään liikettä luokkakenttien oletusarvojen alustamisen lisäksi.
ALGORITMI:
Vaihe 1: Määrittele abstrakti luokka nimeltä 'Shape'.
Vaihe 2: Määritä kaksi kokonaislukumuuttujaa 'x' ja 'y' suojatuiksi.
Vaihe 3: Luo Shape-luokan oletuskonstruktori ja aseta 'x' ja 'y' arvoiksi 0.
Vaihe 4: Luo nyt menetelmä 'getArea()', se on abstrakti menetelmä, joka palauttaa kaksinkertaisen arvon
Vaihe 5: Luo sitten kaksi ei-abstraktia menetelmää 'printPosition()' ja 'setPosition(int x, int y)', jotka kuuluvat Shape-luokkaan.
Vaihe 6: setPosition-menetelmä asettaa x:n ja y:n arvot.
Vaihe 7: PrintPosition-menetelmä tulostaa x:n ja y:n arvot.
Vaihe 8: Määritä ympyräluokka, joka laajentaa muotoluokkaa.
Vaihe 9: Ilmoita kaksoismuuttuja nimeltä 'radius' suojatuksi Circle-luokassa.
Vaihe 10: Määritä Circle-luokalle konstruktori, joka hyväksyy säteen kaksinkertaisen arvon.
Vaihe 11: Toteuta Ympyrä-luokassa getArea-metodi, joka laskee ympyrän alueen.
Vaihe 12: Määritä Square-luokka, joka laajentaa Shape-luokkaa.
Vaihe 13: Ilmoita kaksoismuuttuja nimeltä 'side' suojatuksi Square-luokassa.
Vaihe 14: Määritä Square-luokalle konstruktori, joka hyväksyy kaksinkertaisen arvon sivulle.
Vaihe 15: Toteuta neliön alan laskeva getArea-metodi Square-luokassa.
Vaihe 16: Määrittele pääluokka.
Vaihe 17: Määritä pääfunktio Main-luokassa.
Vaihe 18: Luo ympyräobjekti ja neliöobjekti.
Vaihe 19: Kutsu setPosition-metodia sekä ympyrä- että neliöobjekteille.
Vaihe 20: Kutsu getArea-menetelmä sekä ympyrä- että neliöobjekteille ja tulosta tulokset.
Vaihe 21: Kutsu printPosition-menetelmä sekä ympyrä- että neliöobjekteille ja tulosta tulokset.
Toteutus:
Tässä on yllä olevien vaiheiden toteutus
Tiedoston nimi: 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(); } }
Lähtö:
Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7)
2. Parametrisoitu konstruktori: Kun luot objektia, tällainen konstruktori antaa sinun välittää sille argumentteja. Kun haluat alustaa objektin arvoilla, se on hyödyllistä. Parametrisoitu konstruktori määritellään yhdellä tai ylimääräisellä parametrilla, ja kun objekti luodaan, rakentajalle välitettyjä arvoja käytetään alustamaan kohteen vastaavat kentät.
ALGORITMI:
Vaihe 1: Määrittele abstrakti luokka Shape.
taulukot java
Vaihe 2: Lisää kaksi suojattua ilmentymän muuttujaa, joiden tyyppi on int, x ja y.
Vaihe 3: Luo parametroitu konstruktori, joka alustaa esiintymän muuttujat x ja y ja hyväksyy kaksi int-tyyppistä parametria, x ja y.
Vaihe 4: Määrittele abstrakti luokka Shape.
Vaihe 5: Lisää kaksi suojattua ilmentymän muuttujaa, joiden tyyppi on int, x ja y.
Vaihe 6: Luo parametroitu konstruktori, joka alustaa esiintymän muuttujat x ja y ja hyväksyy kaksi int-tyyppistä parametria, x ja y.
Vaihe 7: Määrittele luokkaympyrä, joka laajentaa muotoa.
2-1 multiplekseri
Vaihe 8: Lisää suojattu ilmentymämuuttuja, jonka tyyppi on kaksoisnimetty säde.
Vaihe 9: Määritä parametroitu konstruktori, joka ottaa kolme parametria tyypiltään int x, y ja double radius ja alustaa x-, y- ja radius-instanssimuuttujat käyttämällä super()-avainsanaa.
Vaihe 10: Toteuta abstrakti menetelmä getArea() laskemalla ympyrän pinta-ala.
Vaihe 11: Määrittele neliöluokka, joka laajentaa muotoa.
Vaihe 12: Lisää suojattu ilmentymämuuttuja, jonka tyyppi on kaksoisnimetty side.
Vaihe 13: Määrittele parametroitu konstruktori, joka ottaa kolme parametria tyypiltään int x, y ja double side ja alustaa x-, y- ja side-instanssimuuttujat käyttämällä super()-avainsanaa.
Vaihe 14: Toteuta abstrakti menetelmä getArea() laskemalla neliön pinta-ala.
Vaihe 15: Määritä luokka Main.
Vaihe 16: Määritä staattinen menetelmä nimeltä main(), joka on ohjelman aloituspiste.
Vaihe 17: Luo Circle-objekti parametroidulla konstruktorilla.
Vaihe 18: Tulosta ympyräobjektin alue ja sijainti käyttämällä getArea()- ja printPosition()-menetelmiä.
Vaihe 19: Luo neliöobjekti parametroidulla konstruktorilla.
Vaihe 20: Tulosta Square-objektin alue ja sijainti käyttämällä getArea()- ja printPosition()-menetelmiä.
Vaihe 21: Ohjelman loppu.
Toteutus:
Edellä mainittujen alla mainittujen vaiheiden toteuttaminen
Tiedoston nimi: 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(); } }
Lähtö:
Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7)
3. Kopioinnin rakentaja: kopiokonstruktoria käytetään luomaan uusi objekti, jolla on samat arvot kuin olemassa olevalla objektilla (eli alkio luodaan aikaisemmin kuin). Se on hyödyllistä, kun meidän on luotava uusi objekti, joka voi olla kopio jo olemassa olevasta/olemassa olevasta objektista. Kopiokonstruktori määritellään vain yhdellä argumentilla tai yhdellä parametrilla, joka on identtisen luokan alkio. Sitten rakentaja luo uuden objektin, jolla on samat arvot kuin parametriobjektilla.
ALGORITMI:
Vaihe 1: Ilmoita abstrakti luokka ilmentymämuuttujilla ja oletuskonstruktorilla.
Vaihe 2: Määritä kopiokonstruktori identtisen luokkatyypin parametrilla.
Vaihe 3: Kutsu kopiokonstruktorissa superluokan kopiokonstruktori super-avainsanalla kopioidaksesi ilmentymämuuttujat parametriobjektista uuteen objektiin.
Vaihe 4: Määritä aliluokan mahdollisten ylimääräisten ilmentymämuuttujien arvot uudelle alkiolle.
Vaihe 5: Käytä abstraktia menetelmää alueen laskemiseen.
Vaihe 6: Määritä tarvittaessa muut menetelmät.
Vaihe 7: Luo pääfunktiossa luokan objekti.
Vaihe 8: Aseta sijainti ja muut ilmentymän muuttujat tarpeen mukaan.
Vaihe 9: Luo uusi objekti käyttämällä kopiokonstruktoria ja välittämällä alkuperäistä kohdetta parametrina.
Vaihe 10: Tulosta sekä alkuperäisen että kopioitujen objektien alue ja sijainti.
Toteutus:
Yllä olevien vaiheiden toteutus on esitetty alla
Tiedoston nimi: 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(); } }
Lähtö:
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)