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 |