logo

Конструктор в абстрактен клас в Java

Абстрактен клас в Java е клас, който не може да бъде инстанциран директно. Целта на това е да действа като базов клас, от който другите класове могат да наследяват и разширяват. Една от важните характеристики е, че абстрактен клас има способността да дефинира конструкторите, които са известни като специални методи и които се извикват, когато се създава обект от клас.

Правила, които трябва да се следват при дефиниране на конструктори в абстрактен клас:

  1. Абстрактните класове могат да имат конструктори, но не могат да бъдат инстанцирани директно. Конструкторите се използват, когато се създава конкретен подклас.
  2. Може да има един или повече абстрактни методи в абстрактен клас, което означава, че тези методи не са имплементирани чрез класа. За да бъде създаден, подклас, който разширява абстрактен клас с абстрактни методи, трябва да имплементира методите. Това означава, че всеки абстрактен метод, деклариран в рамките на абстрактен клас, трябва да има имплементация, ако подкласът трябва да бъде конкретен клас и да може да бъде създаден. С други думи, функционалността, която абстрактният клас е оставил отворена, трябва да бъде попълнена от подкласа.
  3. Когато подклас разширява абстрактен клас с конструктори, подкласът трябва да извика един от конструкторите вътре в суперкласа с помощта на супер ключова дума. Тъй като конструкторът на суперклас инициализира състоянието на обекта и обединява всички жизненоважни ресурси. Ако сега подкласът не извика един от конструкторите в суперкласа, обектът няма да бъде добре инициализиран и сега няма да функционира ефективно/правилно.
  4. Възможно е да се дефинират повече от един конструктор в абстрактен клас, подобно на някой друг клас. Всеки конструктор обаче трябва да бъде дефиниран с различен списък с параметри. Той позволява на подкласовете да избират кой конструктор да извикат въз основа на техните специфични нужди.

Типове конструктори, реализирани с помощта на абстрактен клас:

Има три типа конструктори:

  1. Конструктор по подразбиране
  2. Параметризиран конструктор
  3. Конструктор за копиране

1. Конструктор по подразбиране: Конструкторът се създава автоматично чрез Java, ако в класа не е дефиниран друг конструктор. Той няма параметри и не извършва никакви движения освен инициализиране на стойностите по подразбиране за полетата на класа.

АЛГОРИТЪМ:

Етап 1: Дефинирайте абстрактен клас с име 'Shape'.

Стъпка 2: Декларирайте две целочислени променливи 'x' и 'y' като защитени.

Стъпка 3: Създайте конструктор по подразбиране на клас Shape и задайте „x“ и „y“ на 0.

Стъпка 4: Сега създайте метод 'getArea()', това е абстрактен метод, който ще върне двойна стойност

java сравнява низове

Стъпка 5: След това създайте два неабстрактни метода 'printPosition()' и 'setPosition(int x, int y)', който принадлежи към класа Shape.

Стъпка 6: Методът setPosition задава стойностите на x и y.

Стъпка 7: Методът printPosition отпечатва стойностите на x и y.

Стъпка 8: Дефинирайте клас Circle, който разширява класа Shape.

Стъпка 9: Декларирайте двойна променлива с име „радиус“ като защитена в класа Circle.

Стъпка 10: Дефинирайте конструктор за класа Circle, който приема двойна стойност за радиуса.

Стъпка 11: Приложете метода getArea за класа Circle, който изчислява площта на кръга.

Стъпка 12: Дефинирайте клас Square, който разширява класа Shape.

Стъпка 13: Декларирайте двойна променлива с име „страна“ като защитена в класа Square.

Стъпка 14: Дефинирайте конструктор за класа Square, който приема двойна стойност за страната.

Стъпка 15: Приложете метода getArea за класа Square, който изчислява площта на квадрата.

Стъпка 16: Дефинирайте основен клас.

сайтове като bedpage

Стъпка 17: Дефинирайте основната функция в класа Main.

Стъпка 18: Създайте кръгъл обект и квадратен обект.

Стъпка 19: Извикайте метода setPosition както за обектите Circle, така и Square.

Стъпка 20: Извикайте метода getArea за обектите Circle и Square и отпечатайте резултатите.

Стъпка 21: Извикайте метода printPosition за обектите Circle и Square и отпечатайте резултатите.

Изпълнение:

Ето изпълнението на горните стъпки

Име на файл: 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(); } } 

Изход:

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

2. Параметризиран конструктор: Когато създавате обект, този вид конструктор ви позволява да предавате аргументи към него. Когато искате да инициализирате обекта със стойности, това е полезно. Параметризираният конструктор се дефинира с един или допълнителни параметри и докато се създава обект, стойностите, предадени на конструктора, се използват за инициализиране на съответните полета на елемента.

АЛГОРИТЪМ:

Етап 1: Дефинирайте абстрактен клас Shape.

Стъпка 2: Добавете две защитени променливи на екземпляр от тип int с имена x и y.

Стъпка 3: Създайте параметризиран конструктор, който инициализира променливите на екземпляра x и y и приема два параметъра от тип int, x и y.

Стъпка 4: Дефинирайте абстрактен клас Shape.

Стъпка 5: Добавете две защитени променливи на екземпляр от тип int с имена x и y.

Стъпка 6: Създайте параметризиран конструктор, който инициализира променливите на екземпляра x и y и приема два параметъра от тип int, x и y.

Стъпка 7: Дефинирайте клас Circle, който разширява Shape.

Стъпка 8: Добавете защитена променлива на екземпляр от тип двойно наименуван радиус.

Стъпка 9: Дефинирайте параметризиран конструктор, който приема три параметъра от тип int x, y и двоен радиус и инициализира променливите на екземпляра x, y и radius с помощта на ключовата дума super().

Стъпка 10: Приложете абстрактния метод getArea() чрез изчисляване на площта на Circle.

Стъпка 11: Дефинирайте клас Square, който разширява Shape.

конкатенация на низове

Стъпка 12: Добавете защитена променлива на екземпляр от тип двойно име страна.

Стъпка 13: Дефинирайте параметризиран конструктор, който приема три параметъра от тип int x, y и двойна страна и инициализира променливите на екземпляра x, y и side с помощта на ключовата дума super().

Стъпка 14: Приложете абстрактния метод getArea() чрез изчисляване на площта на Square.

Стъпка 15: Дефинирайте клас Main.

Стъпка 16: Дефинирайте статичен метод с име main(), който е входната точка на програмата.

Стъпка 17: Създайте обект Circle с помощта на параметризиран конструктор.

Стъпка 18: Отпечатайте площта и позицията на обекта Circle, като използвате съответно методите getArea() и printPosition().

Стъпка 19: Създайте квадратен обект с помощта на параметризиран конструктор.

Стъпка 20: Отпечатайте площта и позицията на квадратния обект, като използвате съответно методите getArea() и printPosition().

Стъпка 21: Край на програмата.

Изпълнение:

Изпълнението на горните стъпки, споменати по-долу

Име на файл: 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(); } } 

Изход:

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

3. Конструктор за копиране: конструкторът за копиране се използва за създаване на нов обект с равни стойности като съществуващ обект (т.е. елементът е създаден по-рано от). Полезно е, когато трябва да създадем нов обект, който може да е реплика на обект, който вече е наличен/съществувал. Конструкторът за копиране се дефинира само с един аргумент или един параметър, който е елемент от идентичен клас. След това конструкторът създава нов обект със същите стойности като обект на параметър.

АЛГОРИТЪМ:

инстанциране на java

Етап 1: Декларирайте абстрактен клас с променливи на екземпляр и конструктор по подразбиране.

Стъпка 2: Дефинирайте конструктор за копиране с параметър от идентичен тип клас.

Стъпка 3: В конструктора за копиране извикайте конструктора за копиране на суперклас, като използвате ключовата дума super, за да копирате променливите на екземпляра от обекта на параметъра в новия обект.

Стъпка 4: Присвоете стойностите на всички допълнителни променливи на екземпляра в рамките на подкласа към новия елемент.

Стъпка 5: Приложете абстрактния метод за изчисляване на площта.

Стъпка 6: Определете всички други методи, ако е необходимо.

Стъпка 7: В основната функция създайте обект от класа.

Стъпка 8: Задайте позицията и всички други променливи на екземпляра, ако е необходимо.

Стъпка 9: Създайте нов обект, като използвате конструктора за копиране и подадете оригиналния елемент като параметър.

Стъпка 10: Отпечатайте областта и позицията както на оригиналния, така и на копирания обект.

Изпълнение:

Изпълнението на горните стъпки е дадено по-долу

Име на файл: 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(); } } 

Изход:

 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)