- - Samouczek: Przeciążanie konstruktora w Javie

Samouczek: Przeciążenie konstruktora w Javie

Omówiliśmy już wszystko o Javiekonstruktorów w naszym poprzednim samouczku, a także omawialiśmy różne typy mianowicie konstruktorów. Domyślny konstruktor, sparametryzowany konstruktor i kopiuj konstruktor. Zanim zagłębimy się w szczegóły przeciążania konstruktora, ponownie podsumujemy konstruktora.

Podsumuj konstruktora

  • Konstruktory służą do przypisywania wartości początkowych zmiennym instancji klasy natychmiast po utworzeniu obiektu.
  • Konstruktor jest zawsze wywoływany przez nowego operatora.
  • Domyślny konstruktor bez argumentów zostanie automatycznie wywołany przez maszynę wirtualną Java (JVM).
  • Konstruktory są deklarowane tak samo, jak deklarujemy metody, z tym wyjątkiem, że konstruktor nie ma żadnego typu zwracanego.

Co to jest przeciążanie konstruktora w Javie

Gdy konstruktory mają tę samą nazwę z różnymi argumentami (mogą różnić się liczbą / typem / kolejnością argumentów), tak zwane przeciążenie konstruktora.

Nieruchomości:

  • W klasie koncepcja przeciążenia konstruktora nie pozwala użytkownikowi zewnętrznemu wiedzieć o wewnętrznym przetwarzaniu systemu.
  • Przeciążone konstruktory różnią się liczbą parametrów, rodzajem parametrów lub sekwencją parametrów.
  • JVM różnicuje konstruktorów na podstawie następujących kryteriów
    1. Liczba parametrów
    2. Rodzaj parametrów.
    3. Sekwencja parametrów.
  • Przeciążenie konstruktora pozwala użytkownikowi osiągnąć polimorfizm czasu kompilacji.

Program

class Figure{
double width;
double height;
double depth;
/* Default Constructor */
Figure(){
width = -1;
height = -1;
depth = -1;
}
/* Parameterized constructor when all the dimensions are specified */
Figure(double width,double height,double depth){
this.width = width;
this.height = height;
this.depth = depth;
}
/* Parameterized constructor to calculate volume of Cube */
Figure(double length){
width = height = depth = length;
}
/*Copy Constructor */
Figure(Figure fig){
width = fig.width;
height = fig.height;
depth = fig.depth;
}
/* Method to calculate Volume */
double volume(){
return width*height*depth;
}
}
class CalculateVolume{
public static void main(String args[]){
Figure fig = new Figure();
Figure pp = new Figure(2,3,4);
Figure cube = new Figure(3);
Figure box = new Figure(pp);
System.out.println("Volume of default Figure is: "+fig.volume());
System.out.println("Volume of Parallelopiped is: "+pp.volume());
System.out.println("Volume of Cube is: "+cube.volume());
System.out.println("Volume of Box is: "+box.volume());
}
}

Wynik

Przeciążenie konstruktora

Objaśnienie kodu Java i wyników

Tutaj w klasie Figure, konstruktor Figure () toprzeciążony różnymi argumentami w celu zainicjowania zmiennych instancji w celu obliczenia objętości tych figur geometrycznych. W klasie Figure mamy jednego domyślnego konstruktora, aby zainicjalizować wszystkie zmienne instancji pewnymi wartościami domyślnymi. Tutaj jest -1. Następnie dwa konstruktory to sparametryzowane konstruktory, w których w pierwszym konstruktorze określono wszystkie wymiary, aw drugim jeden wymiar kostki. Ostatni to konstruktor kopii, ilekroć potrzebujemy dowolnej liczby, która może być taka sama jak dowolna z istniejących figur. Następnie możemy użyć tego konstruktora do zainicjowania wymiarów figury, którą będziemy musieli stworzyć. Zatem podczas tworzenia obiektu JVM rozróżnia wszystkie te przeciążone konstruktory na podstawie kryteriów rozdzielczości wspomnianych powyżej we właściwościach.

Jeszcze jeden fundamentalny chciałbym podsumowaćjest deklarowany sparametryzowany konstruktor i bez jawnego deklarowania domyślnej wartości domyślnej, jeśli chcesz utworzyć obiekt tej klasy za pomocą domyślnego konstruktora tej klasy, pojawi się błąd, ponieważ gdy deklarujesz sparametryzowany konstruktor w tym czasie, JVM nie zapewnia własnego konstruktora. Musisz jawnie podać domyślny konstruktor, jednocześnie zapewniając sparametryzowany konstruktor, aby uniknąć błędów wystąpienia.

N.B: Automatyczna konwersja typu danych jest prawdziwa dlaprzeciążenie konstruktora również. Ta konwersja jest prawdą dla konwersji niższego typu danych (np. Int) na wyższy typ danych (np. Podwójny), a nie dla odwrotnej (podwójny na int).

Następnie dowiemy się o jak zwracać obiekty z metod Java.

Zapoznaj się z bardziej przydatnymi samouczkami i definitywnymi wskazówkami na temat programowania Java.

Komentarze