안드로이드 개발자의 창고
[6일차 Java] 오버라이딩(Overriding) 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
- 부모 클래스가 가지고 있는 메서드를 자식 클래스에서 다시 구현한 것을 가르킨다.
- 메서드를 Overriding을 하고 부모 클래스의 메서드를 호출 하고자 할 때는 super 를 이용한다.
- 부모 클래스형 참조 변수를 통해 객체에 접근하면 부모 클래스의 영역에 접근을 하지만 호출하려는 메서드가 Overriding 된 경우에는 자식 클래스에 재정의한 메서드가 호출이 된다.
오버라이딩 조건
- 선언부가 같아야 한다.
- 접근 제어자를 좁은 범위로 변경할 수 없다.
- 부모 클래스의 메서드보다 많은 수의 예외를 처리할 수 없다.
예제 코드
public class MainClass {
public static void main(String[] args) {
SubClass sub1 = new SubClass();
// SubClass를 가지고 객체를 만들어 SubClass형 변수에 담았기 떄문에
// 객체 전체(부모 포함)에 접근할 수 있다.
System.out.printf("sub1.memberA : %d\n", sub1.memberA); // 300
System.out.printf("Sub1.memberB : %d\n", sub1.memberB); // 400
sub1.superMethod1(); // SubClass의 superMethod1 입니다
// SubClass를 가지고 만든 객체의 ID를 부모클래스 타입의 변수에
// 담았기 때문에 접근할 수 있는 영역은 부모의 영역으로 제한된다.
SuperClass super1 = sub1;
System.out.printf("super1.memberA : %d\n", super1.memberA); // 100
System.out.printf("Super1.memberB : %d\n", super1.memberB); // 200
super1.superMethod1(); // SubClass의 superMethod1 입니다(오버라이딩)
sub1.printSubClass();
}
}
// 부모 클래스
class SuperClass {
int memberA = 100;
int memberB = 200;
public void superMethod1() {
System.out.println("SuperClass의 superMethod1 입니다");
}
}
// 자식 클래스
class SubClass extends SuperClass {
// 부모가 가지고 있는 동일한 이름의 변수를 선언한다.
int memberA = 300;
int memberB = 400;
public void printSubClass() {
System.out.printf("memberA : %d\n", memberA); // 300
System.out.printf("memberB : %d\n", memberB); // 400
// 부모클래스의 변수와 동일한 이름의 변수를 정의했을 경우
// 자기 자신 것이 우선이며 부모 것을 사용하고 싶다면 super를 사용한다.
System.out.printf("super.memberA : %d\n", super.memberA); // 100
System.out.printf("super.memberB : %d\n", super.memberB); // 200
}
// 부모 클래스의 메서드를 overriding 한다.
public void superMethod1() {
System.out.println("SubClass의 superMethod1 입니다");
}
}
코드 해석
- SuperClass super1 = sub1;
- 자식 객체의 ID를 부모 객체에 넣어도 접근할 수 있는 영역은 부모 영역 뿐이다.
- 자식 클래스에 있는 메서드로 오버라이딩 되어 부모 클래스의 superMethod1()은 재정의 된다.
- 따라서 결과가 자식 클래스에 있는 "SubClass의 superMethod1 입니다"가 출력된다.
- 부모의 변수나 메서드를 사용하려 할 경우 super를 사용한다.
'Computer > Java' 카테고리의 다른 글
[7일차 Java] Static (0) | 2023.05.06 |
---|---|
[6일차 Java] 캡슐화 (0) | 2023.05.05 |
[6일차 Java] 접근 제한자 (2) | 2023.05.05 |
[5일차 Java] 배열을 이용한 객체의 생성/오버로딩(Overloading)/가변형 매개변수/상속/다형성 (0) | 2023.05.05 |
[4일차 Java] 객체 생성 및 소멸/가비지 컬렉션(Garbage Collection) (0) | 2023.05.05 |