I Java kan vi överbelasta konstruktorer som metoder. Konstruktöröverbelastningen kan definieras som konceptet att ha mer än en konstruktör med olika parametrar så att varje konstruktör kan utföra en annan uppgift.
Tänk på följande Java program, där vi har använt olika konstruktorer i klassen.
Exempel
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); } }
Produktion:
this a default constructor Default Constructor values: Student Id : 0 Student Name : null Parameterized Constructor values: Student Id : 10 Student Name : David
I exemplet ovan, Studentklassen konstruktör är överbelastad med två olika konstruktorer, d.v.s. standard och parametriserad.
Här måste vi förstå syftet med konstruktörsöverbelastning. Ibland måste vi använda flera konstruktorer för att initiera klassens olika värden.
Vi måste också lägga märke till att java-kompilatorn anropar en standardkonstruktor när vi inte använder någon konstruktor i klassen. Standardkonstruktorn anropas dock inte om vi har använt någon konstruktor i klassen, vare sig den är default eller parametriserad. I det här fallet ger java-kompilatorn ett undantag som säger att konstruktorn är odefinierad.
Tänk på följande exempel, som innehåller felet eftersom Colleges-objektet inte kan skapas med standardkonstruktorn nu eftersom det inte innehåller någon.
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. } }
Användning av denna () vid konstruktoröverbelastning
Vi kan dock använda detta nyckelord inuti konstruktorn, som kan användas för att anropa den andra konstruktorn i samma klass.
Betrakta följande exempel för att förstå användningen av detta nyckelord vid konstruktoröverbelastning.
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); } }
Produktion:
Printing Student Information: Name: John Id: 101 Contact No.: 9899234455 College Name: 9899234455 Passing Year: 2018