자바

JAVA 자바 메서드 재정의 - 메서드 재정의(@Override)

알통몬_ 2017. 3. 12. 19:36
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

메서드 재정의

 부모 클래스의 모든 메서드가 자식 클래스에 맞게 설계되어 있다면, 가장 이상적인 상속입니다.

하지만 어떤 메서드는 자식 클래스가 사용하기에 적합하지 않을 수도 있겠죠?

상속된 일부 메서드는 자식 클래스에서 다시 수정해서 사용해야 합니다. 

이런 경우를 위해 메서드 오버라이딩(Overriding) 기능을 제공합니다.


메서드 재정의(@Override)

 메서드가 오버라이딩 되었다면 부모 객체 메서드는 숨겨지기 때문에 

자식 객체에서 메서드를 오출하면 오버라이딩된 자식 메서드가 호출


아래 같은 규칙에 주의해서 작성해야 합니다.

- 부모 메서드와 동일한 리턴타입, 메서드이름, 매개변수리스트를 가져야 한다.

- 접근 제한을 더 강하게 오버라이딩할 수 없다.

- 새로운 예외(Exception)을 throws 할 수 없다.


접근 제한을 더 강하게 오버라이딩할 수 없다 : 부모 메서드가 public 접근 제한을 가지고 있다면 

오버라이딩하는 자식 메서드는 default 나 private접근 제한으로 수정할 수 없다 , 반대는 가능



예제)

부모 클래스

public class Calculator {

double areaCircle(double r) { 

System.out.println("Calculator 객체의 areaCircle() 실행");

return 3.14159 * r * r; 

}

}


자식 클래스

public class Computer extends Calculator {

@Override //생략가능. 아래 메서드가 정확히 오버라이딩된 것인지 컴파일러가 체크하기 때문에 

개발 실수를 줄일 수 있음.

double areaCircle(double r) {

System.out.println("Computer 객체의 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));

}

}


이클립스는 부모 메서드 중 하나를 선택해서 오버라이딩 메서드를 자동 생성해주는 기능이 있습니다.

이 기능은 부모 메서드의 시그너처를 정확히 모를 경우 매우 유용하게 사용할 수 있습니다.

1. 자식 클래스에서 오버라이딩 메서드를 작성할 위치로 커서를 옮깁니다.

2. 메뉴에서 [Source Override/implements Methods...]를 선택합니다.

3. 부모 클래스에서 오버라이딩될 메서드를 선택하고 [OK]를 선택합니다.

반응형