I Java kan vi overbelaste konstruktører som metoder. Konstruktøroverbelastningen kan defineres som konseptet med å ha mer enn én konstruktør med forskjellige parametere slik at hver konstruktør kan utføre en annen oppgave.
Vurder følgende Java program, der vi har brukt forskjellige konstruktører i klassen.
Eksempel
public class Student { //instance variables of the class int id; String name; Student(){ System.out.println('this a default constructor'); } Student(int i, String n){ id = i; name = n; } public static void main(String[] args) { //object creation Student s = new Student(); System.out.println(' Default Constructor values: '); System.out.println('Student Id : '+s.id + ' Student Name : '+s.name); System.out.println(' Parameterized Constructor values: '); Student student = new Student(10, 'David'); System.out.println('Student Id : '+student.id + ' Student Name : '+student.name); } }
Produksjon:
this a default constructor Default Constructor values: Student Id : 0 Student Name : null Parameterized Constructor values: Student Id : 10 Student Name : David
I eksemplet ovenfor, Student-klassen konstruktør er overbelastet med to forskjellige konstruktører, dvs. standard og parameterisert.
Her må vi forstå formålet med konstruktøroverbelastning. Noen ganger må vi bruke flere konstruktører for å initialisere de forskjellige verdiene til klassen.
Vi må også legge merke til at java-kompilatoren påkaller en standardkonstruktør når vi ikke bruker noen konstruktør i klassen. Standardkonstruktøren blir imidlertid ikke påkalt hvis vi har brukt noen konstruktør i klassen, enten den er standard eller parameterisert. I dette tilfellet kaster java-kompilatoren et unntak som sier at konstruktøren er udefinert.
telle distinkt
Tenk på følgende eksempel, som inneholder feilen siden Colleges-objektet ikke kan opprettes ved å bruke standardkonstruktøren nå, siden det ikke inneholder en.
public class Colleges { String collegeId; Colleges(String collegeId){ this.collegeId = 'IIT ' + collegeId; } public static void main(String[] args) { // TODO Auto-generated method stub Colleges clg = new Colleges(); //this can't create colleges constructor now. } }
Bruk av denne () i konstruktøroverbelastning
Vi kan imidlertid bruke dette nøkkelordet inne i konstruktøren, som kan brukes til å starte den andre konstruktøren i samme klasse.
Tenk på følgende eksempel for å forstå bruken av dette nøkkelordet i konstruktøroverbelastning.
public class Student { //instance variables of the class int id,passoutYear; String name,contactNo,collegeName; Student(String contactNo, String collegeName, int passoutYear){ this.contactNo = contactNo; this.collegeName = collegeName; this.passoutYear = passoutYear; } Student(int id, String name){ this('9899234455', 'IIT Kanpur', 2018); this.id = id; this.name = name; } public static void main(String[] args) { //object creation Student s = new Student(101, 'John'); System.out.println('Printing Student Information: '); System.out.println('Name: '+s.name+' Id: '+s.id+' Contact No.: '+s.contactNo+' College Name: '+s.contactNo+' Passing Year: '+s.passoutYear); } }
Produksjon:
Printing Student Information: Name: John Id: 101 Contact No.: 9899234455 College Name: 9899234455 Passing Year: 2018