Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[6일차 Java] 오버라이딩(Overriding) 본문

Computer/Java

[6일차 Java] 오버라이딩(Overriding)

Wise-99 2023. 5. 5. 20:18

 

 

출처 : 안드로이드 앱스쿨 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를 사용한다.