logo

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

Абстрактний клас у Java — це клас, екземпляр якого неможливо створити безпосередньо. Метою цього є діяти як базовий клас, від якого інші класи можуть успадковувати та розширювати. Однією з важливих особливостей абстрактного класу є можливість визначати конструктори, які називаються спеціальними методами, які викликаються під час створення об’єкта класу.

Правила, яких слід дотримуватися під час визначення конструкторів в абстрактному класі:

  1. Абстрактні класи можуть мати конструктори, але їх не можна створити безпосередньо. Конструктори використовуються, коли створюється конкретний підклас.
  2. В абстрактному класі може бути один або більше абстрактних методів, що означає, що ці методи не реалізовані засобами класу. Щоб створити екземпляр, підклас, який розширює абстрактний клас за допомогою абстрактних методів, повинен реалізувати ці методи. Це означає, що кожен абстрактний метод, оголошений в абстрактному класі, повинен мати реалізацію, якщо підклас повинен бути конкретним класом і мати можливість створити екземпляр. Іншими словами, функціональні можливості, які абстрактний клас залишив відкритими, повинні бути заповнені підкласом.
  3. Коли підклас розширює абстрактний клас за допомогою конструкторів, підклас повинен викликати один із конструкторів усередині суперкласу за допомогою ключового слова super. Оскільки конструктор суперкласу ініціалізує стан об’єкта та об’єднує всі життєво важливі ресурси. Якщо підклас тепер не викликає один із конструкторів у суперкласі, об’єкт не буде добре ініціалізований і тепер не працюватиме ефективно/коректно.
  4. Можливо визначити більше одного конструктора в абстрактному класі, подібному до іншого класу. Однак кожен конструктор має бути визначений за допомогою іншого списку параметрів. Це дозволяє підкласам вибирати, який конструктор викликати на основі їхніх конкретних потреб.

Типи конструкторів, реалізованих за допомогою абстрактного класу:

Існує три типи конструкторів:

  1. Конструктор за замовчуванням
  2. Параметризований конструктор
  3. Конструктор копіювання

1. Конструктор за замовчуванням: Конструктор автоматично створюється за допомогою Java, якщо в класі не визначено жодного іншого конструктора. Він не має параметрів і не виконує жодних рухів, крім ініціалізації значень за замовчуванням для полів класу.

АЛГОРИТМ:

Крок 1: Визначте абстрактний клас під назвою 'Shape'.

крок 2: Оголосити дві цілочисельні змінні 'x' і 'y' як захищені.

крок 3: Створіть конструктор класу Shape за замовчуванням і встановіть для «x» і «y» значення 0.

крок 4: Тепер створіть метод getArea() — це абстрактний метод, який повертатиме подвійне значення

крок 5: Потім створіть два неабстрактних методи 'printPosition()' і 'setPosition(int x, int y)', які належать до класу Shape.

Крок 6: Метод setPosition встановлює значення x і y.

Крок 7: Метод printPosition друкує значення x і y.

Крок 8: Визначте клас Circle, який розширює клас Shape.

Крок 9: Оголошіть подвійну змінну з назвою 'radius' як захищену в класі Circle.

Крок 10: Визначте конструктор для класу Circle, який приймає подвійне значення для радіуса.

ipconfig на Ubuntu

Крок 11: Реалізуйте метод getArea для класу Circle, який обчислює площу кола.

Крок 12: Визначте клас Square, який розширює клас Shape.

Крок 13: Оголошіть подвійну змінну з назвою «side» як захищену в класі Square.

Крок 14: Визначте конструктор для класу Square, який приймає подвійне значення для сторони.

Крок 15: Реалізуйте метод getArea для класу Square, який обчислює площу квадрата.

Крок 16: Визначте основний клас.

мережі та Інтернету

Крок 17: Визначте функцію main у класі Main.

Крок 18: Створіть об’єкт Circle та Square.

Крок 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: Додайте захищену змінну екземпляра типу з подвійним іменем radius.

Крок 9: Визначте параметризований конструктор, який приймає три параметри типу int x, y і подвійний радіус та ініціалізує змінні екземпляра x, y і radius за допомогою ключового слова super().

Крок 10: Реалізуйте абстрактний метод getArea(), обчисливши площу кола.

Крок 11: Визначте клас Square, який розширює Shape.

алгоритм knn

Крок 12: Додайте захищену змінну екземпляра типу з подвійним іменем side.

Крок 13: Визначте параметризований конструктор, який приймає три параметри типу int x, y і double side та ініціалізує змінні примірника x, y і side за допомогою ключового слова super().

Крок 14: Реалізуйте абстрактний метод getArea(), обчисливши площу Square.

Крок 15: Визначте клас Main.

Крок 16: Визначте статичний метод під назвою main(), який є точкою входу програми.

Крок 17: Створіть об’єкт Circle за допомогою параметризованого конструктора.

Крок 18: Надрукуйте площу та положення об’єкта Circle за допомогою методів getArea() та printPosition() відповідно.

Крок 19: Створіть квадратний об’єкт за допомогою параметризованого конструктора.

Крок 20: Надрукуйте площу та позицію об’єкта Square за допомогою методів 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. Конструктор копіювання: Конструктор копіювання використовується для створення нового об’єкта з такими самими значеннями, як і існуючий об’єкт (тобто елемент створено раніше). Це корисно, коли нам потрібно створити новий об’єкт, який може бути копією об’єкта, який уже є/існував. Конструктор копіювання визначається лише одним аргументом або одним параметром, який є елементом ідентичного класу. Потім конструктор створює новий об’єкт із такими ж значеннями, що й об’єкт параметра.

АЛГОРИТМ:

Крок 1: Оголошення абстрактного класу зі змінними екземпляра та конструктором за замовчуванням.

крок 2: Визначте конструктор копіювання з параметром ідентичного типу класу.

крок 3: У конструкторі копіювання викличте конструктор копіювання суперкласу, використовуючи ключове слово super, щоб скопіювати змінні екземпляра з об’єкта параметра в новий об’єкт.

крок 4: Призначте значення будь-яких додаткових змінних екземплярів у підкласі новому елементу.

крок 5: Реалізуйте абстрактний метод обчислення площі.

Крок 6: За необхідності визначте будь-які інші методи.

Крок 7: У функції main створіть об’єкт класу.

Крок 8: За потреби встановіть позицію та будь-які інші змінні екземпляра.

Крок 9: Створіть новий об’єкт, використовуючи конструктор копіювання та передаючи вихідний елемент як параметр.

Крок 10: Надрукуйте площу та положення як оригінального, так і скопійованого об’єктів.

Реалізація:

Реалізація вищевказаних кроків наведена нижче

знайти в карті c++

Ім'я файлу: 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)