티스토리 뷰

개발/Java

Java Method Overriding

haloper 2016. 6. 17. 10:24

Method Overriding


Overriding이란, 부모 class의 method를 자식 class에서 재정의 하여 사용하는 것을 말합니다. Overriding을 사용하는 이유는 부모 class 형으로 선언된 자식 인스턴스를 통일된 방식으로 사용하기 위함이라고 볼 수 있습니다. 대표적인 예로 도형을 그리는 로직이 있습니다.


public class Test {


public static void main(String[] args){

List<Shape> shapes = new ArrayList<Shape>();

shapes.add(new Circle());

shapes.add(new Circle());

shapes.add(new Rect());

shapes.add(new Rect());

for(Shape s : shapes) {

s.draw(); // 자식 class에서 재정의한 method가 호출됩니다.

}

}

}


class Shape {

void draw() {

System.out.println("Shape을 그립니다.");

}

}


class Circle extends Shape {

void draw() {

System.out.println("Circle을 그립니다.");

}

}


result :

Circle을 그립니다.

Circle을 그립니다.

Rect를 그립니다.

Rect를 그립니다.



Overriding의 성립 조건은 아래와 같습니다.


1. 당연하겠지만, method 명칭이 동일 해야 합니다.


2. argument list 또한 완전히 동일 해야 합니다.


3. final로 선언된 method는 오버라이딩 할 수 없습니다.


4. return type은 동일 하거나 혹은 하위 클래스여야 합니다.

Overriding을 사용한 경우 부모 클래스 타입으로 선언한 변수에 자식 인스턴스를 할당하여 사용하게 됩니다.

Shape rect = new Rect();

rect.draw();

보통 이런식으로 사용하게 되는데, rect 변수는 Rect 클래스의 인스턴스일지라도, Shape 클래스 변수로 선언되었기 때문에, Shape 클래스와 동일한 조건에서 사용이 가능해야 합니다. 그렇기 때문에 오버라이딩된 method의 리턴값이 하위 호환되지 않을 경우 문제가 발생하게 됩니다. 


5. 접근 제한자는 더 제한적이면 안됩니다.

3번과 같은 이유로 오버라이딩된 method는 접근 제한자가 더 루즈해야 합니다. 접근 제한자가 더 제한적이면 부모 클래스 형식으로 선언된 변수일 경우 해당 method를 사용할 수 없습니다.


6. 부모 class에서 해당 method에 특정 Exception을 선언해 놓았다면, 자식 class에서는 아무런 Exception도 선언하지 않거나, 부모 method에서 선언한 exception의 하위 클래스를 선언해야만 overriding이 가능합니다.

4,5번과 같은 이유입니다.


7. static method는 오버라이딩 되지 않지만, 자식 클래스에서 부모 클래스의 method와 동일한 method를 정의해서 사용할 수 있습니다.

Statis method는 인스턴스가 아니라 클래스명을 바로 사용해서 호출합니다. 상속한 클래스에서 동일 static method를 정의한 경우 다음과 같은 방식으로 사용됩니다.

Parent.staticMethod(); // 부모 static method 호출

Child.staticMethod(); // 자식 statis method 호출



'개발 > Java' 카테고리의 다른 글

JPA 사용 시 View단에서 무한루프에 빠지는 오류 해결 방법  (1) 2016.12.26
Restful API 개발 참고 사항 요약  (0) 2016.11.08
String #2 객체 비교  (0) 2016.06.03
Java String #1  (0) 2016.05.30
Builder Pattern  (0) 2016.05.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함