이번시간에는 오버라이딩에 대해서 알아보겠습니다.
오버라이딩 (Overriding)
오버라이딩은 우리말로 치환이라고 합니다.
쉽게 얘기한다면 재정의한다고 생각하시면 됩니다.
자바 개념으로 한번 볼까요?
하위 클래스에서 정의된 행동에 대해 다시 재정의하여 이름은 같아도 다른 행동을 하도록 할 수 있습니다.
이 말을 예제로 표현 해보겠습니다.
--------------------------------------------------------------------------
class A{
write(){
System.out.println("Class A");
}
}
class B extends A{
write(){
System.out.println("Class B");
}
}
---------------------------------------------------------------------------
위의 예제를 보면 extends라는 단어가 보입니다.
extends는 상속을 할 때 쓰는 말로,
class B extends A 라는 말은 B 클래스가 A 클래스의 것을 상속받는다는 뜻입니다.
A 클래스에서 write() 메소드를 상속 받았는데 B 클래스에 write()라는 똑같은 성질의 메소드가 있습니다.
이 말은 B 클래스가 A 클래스의 write() 메소드를 상속 받았지만 B 클래스에서 다시 write() 메소드를 정의하였습니다.
그래서 class B를 실행시키면 'Class A'가 출력되는 것이 아니라 'Class B'가 출력됩니다.
앞으로 진도 나갈수록 오버로딩이나 오버라이딩에 대해서 예제가 많이 나올 것이기 때문에
여기서는 개념만 이해하고 넘어가도록 하겠습니다.
p.s. 위의 내용을 컴파일 하시고 싶으신 분은 아래의 코드를 복사하여 붙여 보세요~
저장이름 : Overriding.java
--------------------------------------------------------------------------
class Overriding{
public static void main(String[] args) {
A a = new A();
B b = new B();
a.write(); /* A클래스의 write()를 출력 */
b.write(); /* B클래스의 write()를 출력 */
}
}
class A{
public void write(){
System.out.println("Class A");
}
}
class B extends A{
public void write(){
System.out.println("Class B");
}
}
---------------------------------------------------------------------------
자~ 이해가 되지 않으신다면 바로바로 꼬리말로 질문해주세요~
그럼 그 내용을 보충하여 글을 수정해서 업데이트 해드리겠습니다~ ^^
첫댓글 앞 절에서 상속을 받으면 부모 클래스로부터 모든것을 받아온다고 하셧죠? 그럼 B클래스에 write()메소드가 2개가 되네요... 아규먼트도 없으니깐 오버로딩도 아니되고요. 설명해수세용.
아니요... write()메소드에 2개가되는게 아니구요.. 덮어쓰기 아시죠??? A 클래스를 상속받았으나 B에 똑같은 메소드가 있기 때문에 A클래스에서 받은 메소드의 내용 위에 덮어써버리는 것이지요.. 이해 가시나요?
다시 말해서 똑같잖아요.. write()메소드가.. 아규먼트도 없이.. 그래서 그대로 덮어쓰기가 된답니다.. ^^
열심히 공부하시면서 질문하시는 모습이 보기 좋아보여요~ ^^
클래스를 상속 받아 오버라이딩 하는데. 상속 받지않고 는 오버라이딩 않되는거죠? 한 클래스에 아규먼트가 같은 메소드가 2개면 그냥 오류가 나게 되는건가여?
아직 오버라이딩에 대해서 이해를 잘 못하신듯...한데요..[하위 클래스에서 정의된 행동에 대해 다시 재정의]...제가 알기로는 이부분에서는 상속이 됨을 의미한다고 생각됩니다. 그리고 한클래스에 같은 아규먼규먼트가 같은 메소드에.. 아규먼트의 갯수까지 똑같으면 에러납니다. 똑같은 메소드를 두번 쓸 필요는 없지요
^^ 답변도 바로 달아주시네요.. 감사여.. ^^
답답하잖아요.. 모르는거 오래 잡고 있으면요... ^^
---------- JAVA 실행기 ---------- java.lang.NoClassDefFoundError: A Exception in thread "main" 출력 완료 (0초 경과) - 정상 종료 휴... 이것도 이렇게 나오네요... ㅠ_ㅠ
얘도 마찬가지로.. 클래스패스를 지정해주지 않고... 실행해주셔서 그렇구요.. @@
" invalid method declaration; return type required write(){ " w 아래 ^표시 ===> 컴파일 했는데 이런 메시지 나오면 어떤 경우인가요? 또 한가지만요, 저장할때 파일이름을 A.java로 해야하나요?
invalid method declaration; return type required write(){ 이런 에러메시지가 나는 이유는요... 메소드 앞에 쓰는 키워드를 빼먹어서 그런거거든요...
윗 부분을 수정해드리겠습니다. 컴파일이 되도록... ^^;; 그리고 저장할때 이름은 A로 저장하는 것이 아니구요.. main이 있는 클래스의 이름을 저장하는 것입니다.. ^^
------------------------------ 업데이트 끝---------------------------------------
롱이님 void타입 안시켜 놔도 에러 안나세요?? 저는 return type지정 안해주니깐 에러나든데욤.. >_<;
헉;; 미테꺼 고대로 ㅡ,.ㅡ; 안쳐뜨니;; ㅋㅋ 나만 난거구나;; 업뎃해주셨는데 ㅋㅋㅋ 쏘리쏘리~;; +ㅂ+;; 하하