logo

Java의 생성자 오버로딩

Java에서는 메소드와 같은 생성자를 오버로드할 수 있습니다. 생성자 오버로드는 모든 생성자가 서로 다른 작업을 수행할 수 있도록 서로 다른 매개 변수를 가진 둘 이상의 생성자를 갖는 개념으로 정의할 수 있습니다.

다음을 고려하세요 자바 이 프로그램에서는 클래스에서 다른 생성자를 사용했습니다.

 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); } } 

산출:

 this a default constructor Default Constructor values: Student Id : 0 Student Name : null Parameterized Constructor values: Student Id : 10 Student Name : David 

위의 예에서 Student 클래스는 건설자 두 가지 다른 생성자, 즉 기본값과 매개변수화된 생성자로 오버로드됩니다.

여기서는 생성자 오버로딩의 목적을 이해해야 합니다. 때로는 클래스의 다양한 값을 초기화하기 위해 여러 생성자를 사용해야 하는 경우도 있습니다.

또한 클래스에서 생성자를 사용하지 않을 때 Java 컴파일러가 기본 생성자를 호출한다는 점에도 유의해야 합니다. 그러나 기본 생성자든 매개변수화된 생성자든 관계없이 클래스에서 생성자를 사용한 경우 기본 생성자는 호출되지 않습니다. 이 경우 Java 컴파일러는 생성자가 정의되지 않았다는 예외를 발생시킵니다.

javatpoint 자바

Colleges 객체에는 기본 생성자가 없기 때문에 이제 기본 생성자를 사용하여 생성할 수 없기 때문에 오류가 포함된 다음 예제를 고려해 보세요.

 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. } } 

생성자 오버로딩에서 this() 사용

그러나 생성자 내부에서 이 키워드를 사용할 수 있으며, 이는 동일한 클래스의 다른 생성자를 호출하는 데 사용할 수 있습니다.

생성자 오버로드에서 이 키워드의 사용을 이해하려면 다음 예를 고려하십시오.

 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); } } 

산출:

 Printing Student Information: Name: John Id: 101 Contact No.: 9899234455 College Name: 9899234455 Passing Year: 2018