En abstrakt klasse i Java er en klasse som ikke kan instansieres direkte. Målet med dette er å fungere som en basisklasse som de andre klassene kan arves og utvides fra. En av de viktige funksjonene som en abstrakt klasse har en evne til å definere konstruktørene, som er kjent som spesielle metoder og som påkalles når et objekt i en klasse opprettes.
Regler som skal følges når du definerer konstruktører i en abstrakt klasse:
- Abstrakte klasser kan ha konstruktører, men de kan ikke instansieres direkte. Konstruktørene brukes når en konkret underklasse opprettes.
- Det kan være en eller flere abstrakte metoder i en abstrakt klasse, noe som betyr at disse metodene ikke er implementert ved hjelp av klassen. For å bli instansiert, bør en underklasse som utvider en abstrakt klasse med abstrakte metoder implementere metodene. Det betyr at hver abstrakt metode som er deklarert i en abstrakt klasse må ha en implementering hvis en underklasse må være en konkret klasse og kunne instansieres. Med andre ord, funksjonaliteten som den abstrakte klassen lot være åpen, må fylles ut av underklassen.
- Når en underklasse utvider en abstrakt klasse med konstruktører, må underklassen kalle en av konstruktørene inne i superklassen ved hjelp av supernøkkelord. Fordi superklassekonstruktøren initialiserer tilstanden til objektet og samler opp eventuelle vitale ressurser. Hvis underklassen nå ikke kaller en av konstruktørene i superklassen, vil objektet ikke bli godt initialisert og vil nå ikke fungere effektivt/riktig.
- Det er mulig å definere mer enn én konstruktør i en abstrakt klasse, lik en annen klasse. Hver konstruktør må imidlertid defineres med en annen parameterliste. Den lar inn underklasser for å velge ut hvilken konstruktør som skal kalles basert på deres spesifikke behov.
Typer konstruktører implementert ved bruk av abstrakt klasse:
Det er tre typer konstruktører der de er:
- Standard konstruktør
- Parameterisert konstruktør
- Kopier Konstruktør
1. Standard konstruktør: Konstruktøren opprettes automatisk via Java hvis ingen annen konstruktør er definert i klassen. Den har ingen parametere og utfører ingen bevegelser bortsett fra initialisering av standardverdier for klassefelt.
ALGORITME:
Trinn 1: Definer en abstrakt klasse kalt 'Shape'.
Steg 2: Erklær to heltallsvariabler 'x' og 'y' som beskyttede.
Trinn 3: Opprett en standardkonstruktør for Shape-klassen og sett 'x' og 'y' til 0.
Trinn 4: Lag nå en metode 'getArea()' det er en abstrakt metode som kommer til å returnere en dobbel verdi
Trinn 5: Lag deretter to ikke-abstrakte metoder 'printPosition()' og 'setPosition(int x, int y)' som tilhører Shape-klassen.
Trinn 6: SetPosition-metoden setter verdiene til x og y.
Trinn 7: PrintPosition-metoden skriver ut verdiene til x og y.
Trinn 8: Definer en Circle-klasse som utvider Shape-klassen.
java saksuttalelse
Trinn 9: Erklær en dobbel variabel kalt 'radius' som beskyttet i Circle-klassen.
Trinn 10: Definer en konstruktør for Circle-klassen som aksepterer en dobbel verdi for radiusen.
Trinn 11: Implementer getArea-metoden for Circle-klassen som beregner arealet av sirkelen.
Trinn 12: Definer en Square-klasse som utvider Shape-klassen.
Trinn 13: Erklær en dobbel variabel kalt 'side' som beskyttet i Square-klassen.
Trinn 14: Definer en konstruktør for Square-klassen som aksepterer en dobbel verdi for siden.
Trinn 15: Implementer getArea-metoden for Square-klassen som beregner arealet av kvadratet.
Trinn 16: Definer en hovedklasse.
Trinn 17: Definer hovedfunksjonen i hovedklassen.
Trinn 18: Lag et Circle-objekt og et Square-objekt.
Trinn 19: Kalle setPosition-metoden for både Circle- og Square-objektene.
Trinn 20: Kall getArea-metoden for både Circle- og Square-objektene og skriv ut resultatene.
Trinn 21: Kall printPosition-metoden for både Circle- og Square-objektene og skriv ut resultatene.
Gjennomføring:
Her er implementeringen av trinnene ovenfor
Filnavn: 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(); } }
Produksjon:
Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7)
2. Parametrisert konstruktør: Når du oppretter et objekt, lar denne typen konstruktør deg sende argumenter til det. Når du ønsker å initialisere objektet med verdier, er det nyttig. Den parameteriserte konstruktøren er definert med én eller ekstra parametere, og mens et objekt opprettes, brukes verdiene som sendes til konstruktøren til å initialisere de tilsvarende feltene til elementet.
ALGORITME:
Trinn 1: Definer en abstrakt klasse Shape.
javascript onclick
Steg 2: Legg til to beskyttede forekomstvariabler av typen int kalt x og y.
Trinn 3: Lag en parameterisert konstruktør som initialiserer forekomstvariablene x og y og aksepterer to parametere av typen int, x og y.
Trinn 4: Definer en abstrakt klasse Shape.
Trinn 5: Legg til to beskyttede forekomstvariabler av typen int kalt x og y.
Trinn 6: Lag en parameterisert konstruktør som initialiserer forekomstvariablene x og y og aksepterer to parametere av typen int, x og y.
Trinn 7: Definer en klassesirkel som utvider Shape.
Trinn 8: Legg til en beskyttet forekomstvariabel av typen dobbel navngitt radius.
Trinn 9: Definer en parameterisert konstruktør som tar tre parametere av typen int x, y og dobbel radius og initialiserer forekomstvariablene x, y og radius ved å bruke super() nøkkelord.
Trinn 10: Implementer den abstrakte metoden getArea() ved å beregne arealet til Circle.
Trinn 11: Definer en klasse Square som utvider Shape.
Trinn 12: Legg til en beskyttet forekomstvariabel av typen dobbel navngitt side.
Trinn 13: Definer en parameterisert konstruktør som tar tre parametere av typen int x, y og dobbel side og initialiserer x-, y- og sideforekomstvariablene ved å bruke super() nøkkelord.
Trinn 14: Implementer den abstrakte metoden getArea() ved å beregne arealet av Square.
Trinn 15: Definer en klasse Main.
Trinn 16: Definer en statisk metode kalt main() som er inngangspunktet til programmet.
Trinn 17: Lag et Circle-objekt ved hjelp av parameterisert konstruktør.
Trinn 18: Skriv ut området og posisjonen til Circle-objektet ved å bruke henholdsvis getArea()- og printPosition()-metodene.
Trinn 19: Lag et kvadratisk objekt ved hjelp av parameterisert konstruktør.
Trinn 20: Skriv ut området og posisjonen til Square-objektet ved å bruke henholdsvis getArea()- og printPosition()-metodene.
Trinn 21: Slutt på programmet.
Gjennomføring:
Implementeringen av trinnene ovenfor nevnt nedenfor
teskje vs spiseskje
Filnavn: 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(); } }
Produksjon:
Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7)
3. Kopier konstruktør: kopikonstruktør brukes til å lage et nytt objekt med like verdier som et eksisterende objekt (dvs. elementet er opprettet tidligere enn). Det er nyttig mens vi må lage et nytt objekt som kan være en kopi av et objekt som allerede er tilstede/eksisterte. Kopikonstruktør er definert med bare ett argument eller en parameter som er et element av identisk klasse. Deretter oppretter konstruktøren et nytt objekt med samme verdier som et parameterobjekt.
ALGORITME:
Trinn 1: Deklarer en abstrakt klasse med forekomstvariabler og standardkonstruktør.
Steg 2: Definer en kopikonstruktør med en parameter av den samme klassetypen.
Trinn 3: I kopikonstruktøren kaller du superklassens kopikonstruktør ved å bruke supernøkkelordet for å kopiere forekomstvariablene fra parameterobjektet til det nye objektet.
Trinn 4: Tilordne verdiene til eventuelle ekstra forekomstvariabler innenfor underklassen til det nye elementet.
Trinn 5: Implementer den abstrakte metoden for å beregne arealet.
Trinn 6: Definer eventuelle andre metoder etter behov.
Trinn 7: I hovedfunksjonen oppretter du et objekt av klassen.
Trinn 8: Still inn posisjonen og eventuelle andre forekomstvariabler etter behov.
side ned tastaturet
Trinn 9: Lag et nytt objekt ved å bruke kopikonstruktøren og send det originale elementet som en parameter.
Trinn 10: Skriv ut området og plasseringen av både originalen og de kopierte objektene.
Gjennomføring:
Implementeringen av trinnene ovenfor er gitt nedenfor
Filnavn: 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(); } }
Produksjon:
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)