2020. 5. 10. 17:39ㆍJAVA
Overriding?
상위 클래스에서 하위 클래스를 상속할 경우, 둘의 메소드 명이 동일할 때 하위 클래스에서 메소드를 재정의 하는 것을 말한다.
Overriding의 조건
- 메소드 명이 동일해야 하고 매개변수 또한 동일해야 한다.
- 상속 관계 일 때만 성립이 된다.
- 하위 클래스의 접근 제어자가 상위 클래스의 접근 제어자 보다 더 크거나 같아야 한다.
ex) 상위 클래스 : package(default) -> 하위 클래스(public, package(default), protected)
오버 라이딩(Overriding), 오버 로딩(Overloading)의 차이점
- 오버 로딩의경우 메소드 명 이 동일하고 매개변수 는 달라야 하지만 오버라이딩 은 메소드 명, 매개변수 또한 동일해야 한다.
- 오버 라이딩의경우 상속 관계에서만 성립이 된다.
Overriding 예시
1. 부모 클래스(상위 클래스) Shape에서 shapes라는 메소드 생성
2. Shape 클래스를 상속받는 자식 클래스(하위 클래스)
Triangle 클래스에 shapes 메소드를 오버 라이딩한다.
(메소드 명 동일, 매개변수 동일)
추가적으로 넓이를 구할 수 있는 area 메소드를 생성.
3. Triangle 클래스를 상속받는 하위 클래스 인
Squale 클래스에 shapes, area 메소드를 오버 라이딩
즉 재정의 한다.
(메소드 명 도 동일하고 부모 클래스에서 생성할 때
매개변수를 설정 안 했기에 매개변수 또한 없음.)
결괏값을 예상해보자.
main 메소드 :
<Triangle>
shapes 메소드 값 :
도형의 모양은 삼각형입니다.
<Squale>
shapes 메소드 값 :
도형의 모양은 사각형입니다.
area 메소드 값 :
row * column 이므로 (5*4) 20 이 출력될 것이다.
출력 값
Shape 클래스를 생성한 객체 shapes
Triangle 클래스 를 생성한 객체 triangles
Squale 클래스 를 생성한 객체 squales
동일 함수를 호출했음에도 하위 클래스에서 호출한 메소드의 값이 다르다는 걸 알 수 있다.
즉 오버 라이딩(재정의) 알 수 있다.
++
오버 라이딩 한 메소드 위의 @Override(Annotation)
를 추가하는 것이 관례이며, 가독성 면에서도 좋다.
'JAVA' 카테고리의 다른 글
[JAVA] 추상 클래스(Abstract Class) (0) | 2020.05.18 |
---|---|
[JAVA] 오버로딩(OverLoading ) (3) | 2020.05.07 |
[JAVA] Map(HashMap) (1) | 2020.04.22 |
[JAVA] List - ArrayList (2) | 2020.04.12 |
[JAVA] 배열(Array)의 응용 (0) | 2020.04.07 |