반응형
자바, Overriding 성립 조건에 대해 알아보자. |
오버라이딩은 상속에 관련된 녀석인데, 부모 class 가 정의한 함수에 대해서, 자식이 다시 정의해서 사용하는 것을 이야기한다. 부모의 구현이 맘에 들지 않아서일수도 있고, 추가사항이 있어서일수도 있다.
class Parent{
public void doSth(){
// purnish children
}
}
class Child extends Parent{
@Override
public void doSth(){
// love children
}
}
위의 경우는 약간의 상상을 더한 개념인데 ㅋㅋ
우선 Parent 의 doSth 은 아이들을 혼내는 구현이다.
Parent 를 상속한 Child 즉.. 누군가의 아이지만 언젠가 부모가 된 Child 는 doSth 에서 부모의 것인 아이들을 혼내는 것을 사용하지 않고 오버라이딩( 덮어쓰기 ) 하여 아이들을 사랑해주는 구현이다.
이런식으로 맘에 들지 않는 구현은 부모의 구현을 아예 무시하고 갈 수 있지만, 부모의 구현을 존중하면서 가는 방법도 있다.
class Child extends Parent{
@Override
public void doSth(){
super.doSth();
// love children
}
}
이런식으로 써주면 부모의 구현을 존중해주고, 그 다음에 자신의 일도 하게 된다.
( 이 Child 의 자식이 되는 녀석들은 병주고 약주고를 경험하겠지만 ^ ^;; )
사실 특별한 일이 아니라면 부모의 구현을 super 를 통해서 호출해주는 것이 좋다.
자 이제 개념을 봤으니 규칙을 보자.
오버라이딩 성립 규칙
1. 부모 클래스와 자식 클래스 사이에만 성립할 수 있다.
2. static 메소드는 클래스에 속하는 메소드이기 때문에 상속이 안 된다.
3. 접근 제한자가 private 으로 정의된 메소드는 상속 자체가 안 된다.
4. interface 를 구현해서 메소드를 오버라이딩 할 때는 반드시 접근 제한자를 public 으로 해야 한다.
5. 메소드의 인자의 갯수와 타입이 완전히 일치해야 하고, 리턴 타입도 같아야 한다. 인자의 이름은 상관없다.
6. 부모 클래스의 메소드의 접근 제한자보다 좁아질 수 없다. 확장될 수는 있다.
7. 부모 클래스의 메소드보다 더 많은 예외를 던질 수 없다.
8. final 예약어가 지정된 메소드는 오버라이딩 할 수 없다.
사실 오버라이딩 규칙은 자바프로그래밍을 조금이라도 해보고, 상속에 대해 이해한 사람이라면 쉽게 이해할 수 있는 규칙이다.
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] eclipse shows "overlaps the location of another project" error when importing. (0) | 2013.10.03 |
---|---|
How to generate class diagram using eclipse. (0) | 2013.10.01 |
[android] TransitionDrawable 을 잘 쓰면 훌륭한 애니메이션이 될 수 있다. (1) | 2013.10.01 |
[java] 자바 환경변수 설정 방법. (0) | 2013.09.26 |
[android] how to improve the performance of WebView (0) | 2013.09.26 |
댓글