마이의 개발 블로그

[Java] 오버라이딩(overriding)과 오버로딩(overloading) 본문

개발지식/Java

[Java] 오버라이딩(overriding)과 오버로딩(overloading)

개발자마이 2022. 2. 14. 21:19
반응형

오버라이딩(overriding)

- 부모 클래스로부터 상속받은 메서드의 내용을 재정의하여 사용하는 것을 의미함 (=overwrite)

- 자녀 클래스에서 오버라이딩되는 메서드는 조상 클래스의 메서드와 이름, 매개변수, 반환타입이 같아야 함

오버라이딩 주의점

- 자녀 클래스의 메서드는 조상(부모) 클래스의 메서드보다 접근자의 범위가 좁을 수 없음

  *조상 클래스의 메서드가 protected일 때, 자녀 클래스의 메서드는 protected 또는 public만 가능함

- 자녀 클래스의 메서드는 조상(부모) 클래스의 메서드보다 예외의 수가 많을 수 없음

  *조상 클래스의 메서드에  IOException 선언 시, 자녀 클래스의 메서드는 Exception이 될 수 없고 그 반대는 가능함 

- 오버라이딩시 인스턴스 메서드와 static 메서드를 서로 변경할 수 없음

//오버라이딩 예시 - Animal 클래스를 상속받아 재정의된 Dog, Cat 클래스의 sound() 메서드
package overriding;

public class Animal {

	void sound() {
	
    System.out.println("동물이 내는 소리");
	}
}
----------------------------------------------
package overriding;

public class Dog extends Animal {
	
    @Override
	void sound() {
    
		System.out.println("멍멍");
	}
}
-----------------------------------------------
package overriding;

public class Cat extends Animal{

	@Override
	void sound() {
		System.out.println("야옹");
	}
}

오버로딩(overloading)

- 한 클래스 내에서 같은 이름으로 다른 기능을 수행하는 메서드를 정의하는 것

- 메서드의 이름이 같을 때 매개변수의 수와 타입을 다르게 선언하여 오버로딩을 구현할 수 있음 (반환타입은 상관없음)

- 같은 기능을 수행하는 메서드들의 이름을 절약할 수 있다는 장점이 있음

//오버로딩 예시
int add(int a, int b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; }
long add(long a, long b) { return a + b; }
반응형
Comments