본문 바로가기

Dev. Java

[자바 기본기] 오버라이딩

1. 오버라이딩 (overriding) 이란?

"조상클래스로부터 상속받은 메서드의 내용을

     상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다."





2. 오버라이딩의 조건

  • 선언부가 같아야 한다. ( 이름 , 매개변수 , 리턴타입 )

  • 접근 제어자를 좁은 범위로 변경할 수 없다.
- 조상의 메서드가 protected 라면, 범위가 같거나 넓은 protected 나 public 으로만 변경할수있다.


  • 조상클래스의 메서드 보다 많은 수의 예외를 선언할 수 없다.

<덧붙임>
  
     - 조상 클래스에 선언된 예외만이 선언 가능하다. 개수의 문제가 아니다.






3. 오버로딩 vs 오버라이딩

  • 오버로딩(over loading)  : 기존에 없는 새로운 메서드를 정의하는 것
  • 오버라이딩 (overriding) : 상속받은 메서드의 내용을 변경하는것

class Parent  {
                void parentMethod ()  {}
        }


        class Child extends Parent  {
            
             void parentMethod()   {}              // 오버라이딩
             void parentMethod(int i)  {}          // 오버로딩

             void childMethod()  {}       
             void childMethod(int i) {}             // 오버로딩
             void childMethod() {}                  // 에러!!! 같은 클래스 내에 동일 메소드
                                                     중복정의임

       }





4.1 super - 참조변수(1)

  • this : 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어있음
         모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재


  • super : this와 같음. 조상의 멤버와 자신의 멤버를 구별하는 데 사용.
<덧붙임>

<덧붙임2>

조상 클래스에 자손 클래스에서 구현하고자 하는 메소드가 정의되어 있는 경우, 오버라이딩 한후에 조상의 메서드를 호출하는 것이 좋다.

- 코드의 재사용성을 높일 수 있다.

- 조상 클래스의 메서드가 변경되더라도 자손 클래스의 메서드에 자동 반영된다.






5. super() - 조상의 생성자
자손클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.
조상의 멤버들도 초기화되어야 하기 떄문에 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야한다.

 

<덧붙임>

Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자(같은 클래스의 다른 생성자 또는 조상의 생성자)를 호출해야 한다. 그렇지 않으면 컴파일러가 자동적으로 'super();'를 생성자의 첫 줄에 삽입한다.






참조 : http://choijava.blogspot.kr/2013/08/java_19.html?view=sidebar

'Dev. Java' 카테고리의 다른 글

[자바 기본기] 제어자  (0) 2014.05.18
[자바 기본기] package와 import  (0) 2014.05.17
자바 split 메소드로 문자열 분할하기  (0) 2014.05.15
[자바 기본기] 상속  (0) 2014.05.13
문자열 입력과 출력 (Scanner)  (0) 2014.05.13