불로구
23강. (JAVA) 자바 - 오버라이딩(Overriding) 본문
위 그림은 부모 고양이가 자식 고양이에게 화분을 주는 그림이다.
오늘 배울 오버라이딩은 이 그림과 배우 유사한 기능이다!!
오버라이딩
- 자식 클래스는 부모 클래스의 private 멤버를 제외하고 모든 메소드를 상속받으며 이렇게
받은 메소드를 그대로 사용하거나, 필요에 맞게 재정의를 해서 사용할 수 있다.
- 메소드 재정의라고 하며, 상속된 일부 메소드를 자식 클래스에서 다시 수정하는 것이다.
재정의 방법
- 메소드 재정의를 하기 위해 지켜야 하는 몇 가지 규칙이 존재한다
1. 부모의 메소드와 동일한 리턴 타입, 이름, 매개 변수를 가져야 한다
2. 접근 제한을 저 강하게 하지 못한다.
3. 부모보다 예외 처리를 더 많이 할 수 없다
C는 P를 상속받고 있다.
메인에서 C에 대한 참조 변수 c를 생성하고, c를 이용해서 상속받은 method1() 메소드를 실행한다
method2()는 P에게 상속받은 메소드이지만 C에서 재정의를 했기 때문에 C 클래스의 method2()가 실행된다
method3()은 재정의가 아닌 C 클래스에서 생성한 메소드로서 C 클래스의 method3()가 실행된다.
첫 번째 출력과 두 번째 출력을 보면 P 클래스의 참조 변수 p를 이용하여 product()를 호출하면 P 클래스의 메소드가 실행되지만,
P를 상속받은 C 클래스의 참조 변수 c를 이용하여 product()를 호출하면 재정의된 product()가 호출
네 번째와 다섯 번째 출력은, 상속받은 C 클래스에서 color() 메소드를 재정의 하지 않았기 때문에
참조 변수 p, c 모두 부모 클래스인 P 클래스의 color() 메소드가 호출된다.
혹시나 궁금한 점은 댓글로 남겨주세요!
'프로그래밍 > JAVA' 카테고리의 다른 글
25강. (JAVA) 자바 - 타입 변환 & 다형성 (1) (0) | 2020.06.16 |
---|---|
24강. (JAVA) 자바 - 부모 메소드 호출(super) & final (0) | 2020.06.16 |
22강. (JAVA) 자바 - 상속(Inheritance) (0) | 2020.06.15 |
20강. (JAVA) 자바 - 필드 (0) | 2020.06.14 |
19강. (JAVA) 자바 - 다른 생성자 호출 : this() (0) | 2020.06.14 |