본문 바로가기
JAVA/Java

생성자와 오버로딩 vs 오버라이딩

by KkingKkang 2023. 3. 14.

생성자

  • 객체를 생성할 때 new키워드와 함께 사용 ex) new Student();
  • 생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new와 함께 호출 됨
  • 객체가 생성될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행하는 메서드를 호출함
  • 생성자는 반환 값이 없고, 클래스의 이름과 동일
  • 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private으로 선언되는 경우도 있음.
//생성자 만들기

public Student(int studentNumber, String studentName, int grade) {
this.studentNumber = studentNumber;
this.studentName = studentName;
this.grade = grade; }

Student studentLee = new Student(12345,"Lee",3);

 

여러가지 생성자를 정의하는 생성자 오버로딩 (overloading)

  • 생성자를 구현해서 사용할 수 있음
  • 클래스에 생성자를 따로 구현하면 기본 생성자(default constructor)는 제공되지 않음
  • 생성자를 호출하는 코드(client 코드)에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있음
public class UserInfo {

	public String userId;
	public String userPassword;
	public String userName;
	public String userAddress;
	public String phoneNumber;

	//기본 생성자
	public UserInfo(){}

	//생성자
	public UserInfo(String userId, String userPassWord, String userName){
		this.userId = userId;
		this.userPassword = userPassWord;
		this.userName = userName;
	}

	//메서드
	public String showUserInfo() {
		return "고객님의 아이디는 " + userId + "이고, 등록된 이름은" + userName + "입니다.";
	}

}

 

public class UserInfoTest {

	public static void main(String[] args) {
		
		//기본생성자에 넣기
		UserInfo userLee = new UserInfo();
		userLee.userId = "a12345";
		userLee.userPassword = "adksjglawemg";
		userLee.userName = "Lee";
		userLee.phoneNumber = "0102093202";
		userLee.userAddress = "Seoul, Korea";

		System.out.println(userLee.showUserInfo());

		//만들어준 생성자에 넣기
		UserInfo userKim = new UserInfo("bq2352","325asdgh","Kim");
		System.out.println(userKim.showInfo());
	}
}

 

*오버로딩과 오버라이딩 차이

라이딩 : 재정의 / 로딩 : 확장

오버로딩(overloading)은 이름은 같지만 시그니처(파라미터 수, 타입) 에는 다른 메소드를 중복으로 선언하는 것

오버라이딩(overriding)은 부모 클래스의 메소드의 동작 방법을 변경(재정의)하여 우선적으로 사용하는 것
오버라이딩은 쉽게 말해서 '메서드의 이름이 같고, 매개변수가 같고, 반환형이 같은 경우에 상속받은 메서드를 덮어쓴다'
자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속받습니다.

 

반응형

'JAVA > Java' 카테고리의 다른 글

캡슐화(encapsulation)  (0) 2023.03.14
접근 제어 지시자(access modifier)와 정보은닉(information hiding)  (0) 2023.03.14
인스턴스와 힙 메모리  (0) 2023.03.14
함수와 메서드  (0) 2023.03.14
기본 자료형 vs 참조 자료형  (0) 2023.03.13

댓글