2011. 5. 25. 15:15
자바(Java)의 `오버라이딩(Overriding)`과 super 지시자
2011. 5. 25. 15:15 in JavaAndroid
상속 관계에 있는 클래스에서 상속을 받은 하위 클래스에 아무런 내용이 없어도 상속을 해준 상위 클래스, 즉 수퍼 클래스의 내용이 묵시적으로 포함되어 있다. 따라서, 상속을 받은 클래스의 인스턴스를 생성한 후 수퍼 클래스의 멤버 변수와 메서드를 호출하여 사용할 수 있게 된다.
1: class Cpu {
2: public void calc() {3: System.out.println("CPU 1개로 계산을 수행하는 메서드") ;
4: }5: }6:7: class DureCoreCpu extends Cpu {8: }9:10: public class Computer {11: public static void main(String[] args) {12: DureCoreCpu durecore = new DureCoreCpu() ;
13:14: durecore.calc() ;15: }16: }
그런데, 수퍼 클래스에 있는 멤버 메서드와 동일한 이름을 가진 메서드가 상속을 받은 하위 클래스에 존재하게 된다면 어떨까. 이
경우에는 하위 클래스에 있는 메서드가 실행된다. 이렇게 되면 수퍼 클래스에서 상속받은 메서드를 서브 클래스에서 추가, 변경 또는
새롭게 정의하여 사용할 수 있다. 이것을 `오버라이딩(Overriding)`이라고 한다.
메서드를 오버라이딩 하려면 우선 이름이 같아야 하고, 메시지의 데이터 타입과 갯수에다 리턴 형식까지 동일해야 한다. 참고로 접근 제어는 범위를 좁힐 수 없으며 static, final, private 메서드는 오버라이딩 할 수 없다.
1: class DureCoreCpu extends Cpu {
2: public void calc() {
3: System.out.println("CPU 2개로 계산을 수행하는 메서드") ;
4: }5: }
'super'
라는 것은 상위 수퍼 클래스를 가리키는 지시자로 하위 클래스에서 오버라이딩 된 메서드 대신 상위 클래스의 원형 메서드를 호출하는데
이용된다. super() 역시 마찬가지로 수퍼 클래스의 생성자를 호출하는 데 사용한다. 이 super(); 라는 구문을 상속받게 되면 코딩을 하지 않아도 묵시적으로 포함된다.
1: class DureCoreCpu extends Cpu {
2: public void calc() {
3: super.calc() ;4: System.out.println("CPU 2개로 계산을 수행하는 메서드") ;
5: }6: }
'JavaAndroid' 카테고리의 다른 글
C#으로 만든 간단한 콘솔 계산기 (0) | 2011.06.02 |
---|---|
C# 구구단 출력 프로그램 (0) | 2011.06.01 |
C에서 배열(Array)과 포인터(Pointer)의 활용 (0) | 2011.05.31 |
자바(Java)의 `Random 클래스`로 구현한 숫자 맞추기 야구 게임 (0) | 2011.05.27 |
자바(Java)에서 `is a` 관계와 `has a` 관계 (0) | 2011.05.25 |
자바(Java)의 상속 예제 코드 (0) | 2011.05.24 |
자바(Java)에서 static으로 선언되는 변수와 메소드 (0) | 2011.05.23 |
자바(Java) 생성자, setter와 getter, 오버로딩 종합 정리 (0) | 2011.05.21 |