본문 바로가기
JAVA

[JAVA] 메소드 오버라이딩 알아보기

by IT 정복가 2023. 8. 16.
728x90

메소드 재정의

부모 클래스의 모든 메소드가 자식 클래스에게 맞게 설계되어 있다면 가장 이상적인 상속이지만

어떤 메소드는 자식 클래스가 사용하기에 적합하지 않을 수 있다. 

이런 메소드는 자식 클래스에서 재정의해서 사용해야 한다.

이러한 것을 '메소드 오버라이딩'이라고 한다.

 

메소드 오버라이딩(Method Overriding)

메소드 오버라이딩은 상속된 메소드를 자식 클래스에서 재정의하는 것을 말한다.

메소드 오버라이딩이 되었다면 해당 부모 메소드는 숨겨지고 자식 메소드가 우선적으로 사용된다.

한마디로 부모것을 사용하지 않고 내것을 사용하겠다는 것이다.

위 그림을 보면 자식 클래스에도 method2()가 있고 부모 클래스에도 method2()가 있다.

이때 부모것을 선택하지 않고 자식 클래스의 method2()를 선택하는 것이 메소드 오버라이딩이다.

 

※ 주의사항 ※

  1. 부모 메소드의 선언부(리턴타입, 메소드 이름, 매개변수)와 동일해야 함
  2. 접근 제한을 더 강하게 오버라이딩 할 수 없음(public >> private으로 변경 불가)
  3. 새로운 예외를 throws 할 수 없음

예시)

class Calculator{
	public double areaCircle(double r) {
		System.out.println("Calculator 객체의 areaCircle 메소드 실행");
		return 3.14 * r * r;
	}
}

class Computer extends Calculator{
	
	//오버라이딩
	@Override
	public double areaCircle(double r) {
		System.out.println("Calculator 객체의 areaCircle 메소드 실행");
		return Math.PI * r * r;
	}
}

public class ComputerExample {

	public static void main(String[] args) {
		int r = 10;
		
		Calculator calculator = new Calculator();
		System.out.println("원 면적: "+ calculator.areaCircle(r));
		
		System.out.println();
		
		Computer computer = new Computer();
		System.out.println("원 면적: "+ computer.areaCircle(r));

	}

}

메인 클래스를 보자.

r을 10으로 초기화 한 후 Calculator 객체를 생성한다. 그 후에 원 면적을 출력해 보면 Calculator 클래스는 상속받는게 없기 때문에 정상적으로 출력이 된다.

다음을 보면,

Computer 객체를 생성한 후 computer.areaCircle(r)을 실행하면 원래는 Computer가 Calculator를 상속받고 있기 때문에 Calculator 클래스에 있는 calculator.areaCircle(r)를 실행해야 하지만 오버라이딩 하고 있기 때문에 Computer 클래스에 있는 areaCircle을 호출하는 것을 볼 수 있다.

728x90