logo

Konstruktør i abstrakt klasse i Java

En abstrakt klasse i Java er en klasse, der ikke kan instansieres direkte. Målet med dette er at fungere som en basisklasse, hvorfra de andre klasser kan arves og udvides. En af de vigtige funktioner, som en abstrakt klasse har en evne til at definere konstruktørerne, som er kendt som specielle metoder, og som påkaldes, når et objekt i en klasse oprettes.

Regler, der skal følges, når man definerer konstruktører i en abstrakt klasse:

  1. Abstrakte klasser kan have konstruktører, men de kan ikke instansieres direkte. Konstruktørerne bruges, når en konkret underklasse oprettes.
  2. Der kan være en eller flere abstrakte metoder i en abstrakt klasse, hvilket betyder, at disse metoder ikke implementeres ved hjælp af klassen. For at blive instansieret bør en underklasse, der udvider en abstrakt klasse med abstrakte metoder, implementere metoderne. Det betyder, at hver abstrakt metode, der er erklæret inden for en abstrakt klasse, skal have en implementering, hvis en underklasse skal være en konkret klasse og kunne instansieres. Med andre ord skal den funktionalitet, som den abstrakte klasse efterlod åben, udfyldes af underklassen.
  3. Når en underklasse udvider en abstrakt klasse med konstruktører, skal underklassen kalde en af ​​konstruktørerne inde i superklassen ved hjælp af supernøgleord. Fordi superklasse-konstruktøren initialiserer objektets tilstand og samler eventuelle vitale ressourcer. Hvis underklassen nu ikke kalder en af ​​konstruktørerne i superklassen, vil objektet ikke være godt initialiseret og vil nu ikke fungere effektivt/korrekt.
  4. Det er muligt at definere mere end én konstruktør i en abstrakt klasse, svarende til en anden klasse. Hver konstruktør skal dog defineres med en anden parameterliste. Det tillader underklasser at vælge, hvilken konstruktør der skal ringes til baseret på deres specifikke behov.

Typer af konstruktører implementeret ved hjælp af abstrakt klasse:

Der er tre typer konstruktører, hvor de er:

  1. Standard konstruktør
  2. Parametriseret konstruktør
  3. Kopi konstruktør

1. Standardkonstruktør: Konstruktøren oprettes automatisk via Java, hvis der ikke er defineret en anden konstruktør i klassen. Den har ingen parametre og udfører ingen bevægelser bortset fra initialisering af standardværdier for klassefelter.

ALGORITME:

Trin 1: Definer en abstrakt klasse ved navn 'Shape'.

Trin 2: Erklær to heltalsvariable 'x' og 'y' som beskyttede.

Trin 3: Opret en Shape-klasse-standardkonstruktør og sæt 'x' og 'y' til 0.

Trin 4: Opret nu en metode 'getArea()' det er en abstrakt metode, som vil returnere en dobbelt værdi

Trin 5: Opret derefter to ikke-abstrakte metoder 'printPosition()' og 'setPosition(int x, int y)', som hører til Shape-klassen.

Trin 6: SetPosition-metoden indstiller værdierne for x og y.

Trin 7: PrintPosition-metoden udskriver værdierne af x og y.

Trin 8: Definer en Circle-klasse, der udvider Shape-klassen.

java sagsfremstilling

Trin 9: Erklær en dobbelt variabel ved navn 'radius' som beskyttet i Circle-klassen.

Trin 10: Definer en konstruktør for Circle-klassen, der accepterer en dobbeltværdi for radius.

Trin 11: Implementer getArea-metoden for Circle-klassen, som beregner arealet af cirklen.

Trin 12: Definer en Square-klasse, der udvider Shape-klassen.

Trin 13: Erklær en dobbelt variabel ved navn 'side' som beskyttet i Square-klassen.

Trin 14: Definer en konstruktør for Square-klassen, der accepterer en dobbeltværdi for siden.

Trin 15: Implementer getArea-metoden for Square-klassen, som beregner arealet af kvadratet.

Trin 16: Definer en hovedklasse.

Trin 17: Definer hovedfunktionen i hovedklassen.

Trin 18: Opret et Circle-objekt og et Square-objekt.

Trin 19: Kald setPosition-metoden for både Circle- og Square-objekterne.

Trin 20: Kald getArea-metoden for både Circle- og Square-objekterne og udskriv resultaterne.

Trin 21: Kald printPosition-metoden for både Circle- og Square-objekterne og udskriv resultaterne.

Implementering:

Her er implementeringen af ​​ovenstående trin

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(); } } 

Produktion:

 Area of a circle is: 78.53981633974483 The Position:(2, 3) Area of a square is: 16.0 The Position:(5, 7) 

2. Parametriseret konstruktør: Når du opretter et objekt, lader denne form for konstruktør dig sende argumenter til det. Når du ønsker at initialisere objektet med værdier, er det nyttigt. Den parametrerede konstruktør er defineret med en eller ekstra parametre, og mens et objekt oprettes, bruges de værdier, der sendes til konstruktøren, til at initialisere elementets tilsvarende felter.

ALGORITME:

Trin 1: Definer en abstrakt klasse Shape.

offentlig vs privat java

Trin 2: Tilføj to beskyttede instansvariabler af typen int ved navn x og y.

Trin 3: Opret en parameteriseret konstruktør, der initialiserer instansvariablerne x og y og accepterer to parametre af typen int, x og y.

Trin 4: Definer en abstrakt klasse Shape.

Trin 5: Tilføj to beskyttede instansvariabler af typen int ved navn x og y.

Trin 6: Opret en parameteriseret konstruktør, der initialiserer instansvariablerne x og y og accepterer to parametre af typen int, x og y.

Trin 7: Definer en klassecirkel, der udvider form.

Trin 8: Tilføj en beskyttet instansvariabel af typen dobbeltnavnet radius.

Trin 9: Definer en parameteriseret konstruktør, der tager tre parametre af typen int x, y og dobbelt radius og initialiserer instansvariablerne x, y og radius ved hjælp af super() nøgleord.

Trin 10: Implementer den abstrakte metode getArea() ved at beregne arealet af Circle.

Trin 11: Definer en klasse Square, der udvider Shape.

Trin 12: Tilføj en beskyttet instansvariabel af typen dobbeltnavnet side.

Trin 13: Definer en parameteriseret konstruktør, der tager tre parametre af typen int x, y og dobbeltside og initialiserer x-, y- og sideforekomstvariablerne ved hjælp af super() nøgleord.

Trin 14: Implementer den abstrakte metode getArea() ved at beregne arealet af Square.

Trin 15: Definer en klasse Main.

Trin 16: Definer en statisk metode ved navn main(), som er indgangspunktet for programmet.

Trin 17: Opret et Circle-objekt ved hjælp af parameteriseret konstruktør.

Trin 18: Udskriv området og positionen af ​​Circle-objektet ved hjælp af henholdsvis getArea()- og printPosition()-metoderne.

Trin 19: Opret et kvadratisk objekt ved hjælp af parameteriseret konstruktør.

Trin 20: Udskriv området og positionen af ​​Square-objektet ved hjælp af henholdsvis getArea()- og printPosition()-metoderne.

Trin 21: Slut på programmet.

Implementering:

Implementeringen af ​​ovenstående trin nævnt nedenfor

pyspark tutorial

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(); } } 

Produktion:

 Area of circle is: 78.53981633974483 The position: (2, 3) Area of square is:16.0 The position: (5, 7) 

3. Kopi konstruktør: kopikonstruktør bruges til at oprette et nyt objekt med de samme værdier som et eksisterende objekt (dvs. elementet er oprettet tidligere end). Det er nyttigt, mens vi skal oprette et nyt objekt, der kan være en replika af et objekt, der allerede er til stede/eksisterer. Kopikonstruktør er defineret med kun ét argument eller én parameter, der er et element af identisk klasse. Derefter opretter konstruktøren et nyt objekt med samme værdier som et parameterobjekt.

ALGORITME:

Trin 1: Erklære en abstrakt klasse med instansvariabler og standardkonstruktør.

Trin 2: Definer en kopikonstruktør med en parameter af den samme klassetype.

Trin 3: I kopikonstruktøren skal du kalde superklassens kopikonstruktør ved at bruge supernøgleordet til at kopiere instansvariablerne fra parameterobjektet til det nye objekt.

Trin 4: Tildel værdierne af eventuelle ekstra instansvariabler inden for underklassen til det nye element.

Trin 5: Implementer den abstrakte metode til at beregne arealet.

Trin 6: Definer eventuelle andre metoder efter behov.

Trin 7: I hovedfunktionen skal du oprette et objekt af klassen.

Trin 8: Indstil positionen og eventuelle andre instansvariabler efter behov.

streng til json-objekt

Trin 9: Opret et nyt objekt ved brug af kopikonstruktøren og overfør det originale element som en parameter.

Trin 10: Udskriv området og placeringen af ​​både de originale og kopierede objekter.

Implementering:

Implementeringen af ​​ovenstående trin er angivet 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(); } } 

Produktion:

 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)