„Java“ programoje galime perkrauti konstruktorius, pavyzdžiui, metodus. Konstruktoriaus perkrova gali būti apibrėžiama kaip koncepcija turėti daugiau nei vieną konstruktorių su skirtingais parametrais, kad kiekvienas konstruktorius galėtų atlikti skirtingą užduotį.
Apsvarstykite šiuos dalykus Java programa, kurioje klasėje naudojome skirtingus konstruktorius.
Pavyzdys
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); } }
Išvestis:
this a default constructor Default Constructor values: Student Id : 0 Student Name : null Parameterized Constructor values: Student Id : 10 Student Name : David
Aukščiau pateiktame pavyzdyje studentų klasė konstruktorius yra perkrautas dviem skirtingais konstruktoriais, ty numatytais ir parametrizuotais.
Čia turime suprasti konstruktoriaus perkrovos tikslą. Kartais, norėdami inicijuoti skirtingas klasės reikšmes, turime naudoti kelis konstruktorius.
Taip pat turime pastebėti, kad java kompiliatorius iškviečia numatytąjį konstruktorių, kai klasėje nenaudojame jokio konstruktoriaus. Tačiau numatytasis konstruktorius neiškviečiamas, jei klasėje naudojome bet kurį konstruktorių, nesvarbu, ar jis yra numatytasis, ar parametrizuotas. Šiuo atveju „Java“ kompiliatorius pateikia išimtį, sakydamas, kad konstruktorius neapibrėžtas.
Apsvarstykite šį pavyzdį, kuriame yra klaida, nes objekto Colleges dabar negalima sukurti naudojant numatytąjį konstruktorių, nes jame jo nėra.
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. } }
Šio () naudojimas perkraunant konstruktorių
Tačiau šį raktinį žodį galime naudoti konstruktoriaus viduje, kurį galima naudoti norint iškviesti kitą tos pačios klasės konstruktorių.
Apsvarstykite šį pavyzdį, kad suprastumėte šio raktinio žodžio naudojimą konstruktoriaus perkrovoje.
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); } }
Išvestis:
Printing Student Information: Name: John Id: 101 Contact No.: 9899234455 College Name: 9899234455 Passing Year: 2018