Апстрактна класа у Јави је класа која се не може директно инстанцирати. Циљ овога је да делује као базна класа из које би остале класе могле наследити и проширити. Једна од важних карактеристика је да апстрактна класа има способност да дефинише конструкторе, који су познати као посебне методе и које се позивају када се креира објекат класе.
Правила која треба поштовати приликом дефинисања конструктора у апстрактној класи:
- Апстрактне класе могу имати конструкторе, али се не могу директно инстанцирати. Конструктори се користе када се креира конкретна подкласа.
- У апстрактној класи може постојати једна или више апстрактних метода, што значи да се те методе не имплементирају помоћу класе. Да би била инстанцирана, поткласа која проширује апстрактну класу апстрактним методама треба да имплементира методе. То значи да свака апстрактна метода декларирана унутар апстрактне класе мора имати имплементацију ако поткласа треба да буде конкретна класа и да може бити инстанцирана. Другим речима, функционалност коју је апстрактна класа оставила отвореном мора бити попуњена подкласом.
- Када поткласа проширује апстрактну класу конструкторима, поткласа треба да позове један од конструктора унутар суперкласе уз помоћ кључне речи супер. Зато што конструктор суперкласе иницијализује стање објекта и обједињује све виталне ресурсе. Ако поткласа сада не позове један од конструктора у суперкласи, објекат неће бити добро иницијализован и сада неће функционисати ефикасно/исправно.
- Изводљиво је дефинисати више од једног конструктора у апстрактној класи, слично некој другој класи. Међутим, сваки конструктор мора бити дефинисан са различитом листом параметара. Омогућава подкласама да изаберу који конструктор ће позвати на основу њихових специфичних потреба.
Типови конструктора имплементирани помоћу апстрактне класе:
Постоје три типа конструктора:
- Подразумевани конструктор
- Параметризовани конструктор
- Цопи Цонструцтор
1. Подразумевани конструктор: Конструктор се аутоматски креира преко Јаве ако у класи није дефинисан други конструктор. Он нема параметре и не врши никакве покрете осим иницијализације подразумеваних вредности за поља класе.
АЛГОРИТАМ:
Корак 1: Дефинишите апстрактну класу под називом 'Схапе'.
Корак 2: Две целобројне променљиве 'к' и 'и' прогласити заштићеним.
Корак 3: Направите подразумевани конструктор класе Схапе и поставите 'к' и 'и' на 0.
4. корак: Сада креирајте метод 'гетАреа()', то је апстрактни метод који ће вратити двоструку вредност
5. корак: Затим креирајте две неапстрактне методе 'принтПоситион()' и 'сетПоситион(инт к, инт и)' које припадају класи Схапе.
Корак 6: Метода сетПоситион поставља вредности к и и.
7. корак: Метод принтПоситион штампа вредности к и и.
Корак 8: Дефинишите класу Цирцле која проширује класу Схапе.
9. корак: Објавите двоструку променљиву под називом 'радијус' као заштићену у класи Цирцле.
10. корак: Дефинишите конструктор за класу Цирцле који прихвата двоструку вредност за радијус.
Корак 11: Имплементирајте метод гетАреа за класу Цирцле која израчунава површину круга.
Корак 12: Дефинишите класу Скуаре која проширује класу Схапе.
Корак 13: Објавите двоструку променљиву под називом 'сиде' као заштићену у класи Скуаре.
Корак 14: Дефинишите конструктор за класу Скуаре који прихвата двоструку вредност за страну.
Корак 15: Имплементирајте метод гетАреа за класу Скуаре која израчунава површину квадрата.
Корак 16: Дефинишите главну класу.
Корак 17: Дефинишите главну функцију у класи Маин.
Корак 18: Креирајте објекат круга и квадратни објекат.
гит статус
Корак 19: Позовите метод сетПоситион за објекте Цирцле и Скуаре.
Корак 20: Позовите метод гетАреа за објекте Цирцле и Скуаре и одштампајте резултате.
Корак 21: Позовите метод принтПоситион за објекте Цирцле и Скуаре и одштампајте резултате.
Имплементација:
Ево имплементације горњих корака
Назив документа: ДефаултМаин.јава
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: Дефинишите апстрактну класу Схапе.
Корак 2: Додајте две заштићене променљиве инстанце типа инт под називом к и и.
Корак 3: Креирајте параметризовани конструктор који иницијализује променљиве инстанце к и и и прихвата два параметра типа инт, к и и.
4. корак: Дефинишите апстрактну класу Схапе.
5. корак: Додајте две заштићене променљиве инстанце типа инт под називом к и и.
Корак 6: Креирајте параметризовани конструктор који иницијализује променљиве инстанце к и и и прихвата два параметра типа инт, к и и.
7. корак: Дефинишите класу Цирцле која проширује облик.
Корак 8: Додајте заштићену променљиву инстанце типа радијус са двоструким именом.
9. корак: Дефинишите параметризовани конструктор који узима три параметра типа инт к, и и двоструки радијус и иницијализује променљиве инстанце к, и и радијуса користећи кључну реч супер().
10. корак: Имплементирајте апстрактни метод гетАреа() тако што ћете израчунати површину круга.
Корак 11: Дефинишите класу Квадрат који проширује облик.
Корак 12: Додајте заштићену променљиву инстанце типа са двоструким именом сиде.
Корак 13: Дефинишите параметризовани конструктор који узима три параметра типа инт к, и и доубле сиде и иницијализује променљиве инстанце к, и и сиде користећи кључну реч супер().
шта је кошница
Корак 14: Имплементирајте апстрактни метод гетАреа() тако што ћете израчунати површину квадрата.
Корак 15: Дефинишите класу Маин.
Корак 16: Дефинишите статичку методу под називом маин() која је улазна тачка програма.
Корак 17: Креирајте објекат Цирцле користећи параметризовани конструктор.
Корак 18: Одштампајте област и позицију објекта Цирцле користећи методе гетАреа() и принтПоситион().
Корак 19: Креирајте квадратни објекат користећи параметризовани конструктор.
Корак 20: Одштампајте област и позицију квадратног објекта користећи методе гетАреа() и принтПоситион().
Корак 21: Крај програма.
Имплементација:
Имплементација горе наведених корака наведених у наставку
Назив документа: ПараметеризедМаин.јава
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: У конструктору копирања, позовите конструктор копирања суперкласе користећи кључну реч супер да бисте копирали променљиве инстанце из објекта параметра у нови објекат.
4. корак: Новој ставци доделите вредности било које додатне променљиве инстанце унутар поткласе.
5. корак: Примените апстрактни метод за израчунавање површине.
Корак 6: Дефинишите све друге методе по потреби.
7. корак: У главној функцији креирајте објекат класе.
Корак 8: Подесите позицију и све друге променљиве инстанце по потреби.
9. корак: Креирајте нови објекат коришћењем конструктора копирања и прослеђивањем оригиналне ставке као параметра.
10. корак: Одштампајте површину и позицију оригиналних и копираних објеката.
Имплементација:
Имплементација горњих корака је дата у наставку
Назив документа: ЦопиМаин.јава
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)