본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] Overriding 성립 조건에 대해 알아보자.

by 돼지왕 왕돼지 2013. 10. 1.
반응형


 자바, Overriding 성립 조건에 대해 알아보자.

 

[Java] 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 예약어가 지정된 메소드는 오버라이딩 할 수 없다.





사실 오버라이딩 규칙은 자바프로그래밍을 조금이라도 해보고, 상속에 대해 이해한 사람이라면 쉽게 이해할 수 있는 규칙이다.


반응형

댓글