티스토리 뷰

★ 오버로딩 vs 오버라이딩

 

☆ 오버로딩

- 같은 이름의 메서드 여러 개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 것

- 매개변수만 다른 것 

  (리턴 타입, 함수명은 같은데 파라미터만 다른 것)

 

☆ 오버라이딩

- 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의 해서 사용

- 자식 클래스에서 다시 만들어 쓰는 것

 

☆ 오버로딩, 오버라이딩 성립 조건

구분 오버로딩 오버라이딩
메서드 이름 동일 동일
매개변수, 타입 비동일 동일
리턴 타입 상관 없음 동일

톰이 물었다.

"너는 어떤 동물이야?"

제리는 알려주기 싫어 튕기면서 말했다.

"내 이름은 비밀인데?"

톰은 먼저 이름을 알려주었다. 그래서 제리가 말했다.

"톰 안녕, 나는 제리야" 라고.

 

이것을 출력할 것이다. 


Animal.java를 만들었다.

1. string 타입의 name이라는 멤버 변수를 만들었다.

2. showname이라는 메서드를 만들었다.

   이 메서드는 name을 넣으면 너는 name이야 라고 출력할 수 있다.

   이것은 c언어에서 printf를 입력하고, %s string 타입을 넣으세요라고 해석할 수 있다. 


"너는 어떤 동물이야?" 라고 출력하기 위해서 

App.java를 보자. 

someAnimal이라는 객체를 만들었다.

Animal 클래스의 name에 "어떤 동물"을 넣기 위해 someAnimal.name = "어떤 동물" 을 입력한다.

showName의 메서드를 이용하여 출력하면 된다. 

출력 화면


제리가 튕겨서 "내 이름은 비밀인데?" 라고 말을 했다. 이 대사를 출력해보자. 

 

Animal 클래스의 showName을 Mouse.java 클래스에서 오버라이딩한다. 

 

1. Mouse 클래스가 Animal 클래스를 상속받게 한다.

2.Animal 클래스의 showName ( ) 메서드를 Mouse 클래스에서 재정의하도록 했다.

 

☆ 오버라이딩 (overriding)

- 재정의 : 상위 클래스의 메서드와 '같은' 메서드 이름,  '같은' 인자 리스트

 

출력 화면


이제 톰 안녕 나는 제리야라고 출력해보자.

App.java에 톰을 넣는다. 

 

App.java의  톰이 string yourName 인자값이 되도록 한다.

☆ 오버로딩 (overloading)

- 중복 정의 : ' 같은' 메서드 이름,  ' 다른' 인자 리스트,  상위 클래스와 관련이 없는 개념

 

출력 화면


package com.overriding;

public class Animal {
	public String name;
	
	public void showName () {
		System.out.printf("너는 %s이야",name); 
	}
}
package com.overriding;

public class Mouse extends Animal{
	public String address;

	
	public void showName() {
		System.out.println("내 이름은 비밀인데?");
	}
	
	
	public void showName(String yourName) {
		System.out.printf("%s 안녕,나는 %s야 \n", yourName, name);
	}
	
}
package com.overriding;

public class App {

	public static void main(String[] args) {
		Animal someAnimal = new Animal();
		someAnimal.name = "어떤 동물";
		someAnimal.showName();
		System.out.println();
		
		Mouse jerry = new Mouse();
		jerry.name = "제리";
		jerry.address = "하와이";
		
		jerry.showName();
		
		jerry.showName("톰");
	}

}