열심히 끝까지

24강 상속과 다형성 - 상속 / 메서드 오버라이딩 본문

멘토씨리즈 JAVA

24강 상속과 다형성 - 상속 / 메서드 오버라이딩

노유림 2022. 4. 29. 18:50

24-1 ) 상속과 오버라이딩

        (1) 상속
                상속이란?
                      : 부모클래스의 기능을 자식클래스가 물려받는 것

                사용목적?
                      : 부모클래스에서 작성한 기능의 재사용하기 위해

                상속 방법
                 [구조]
                 class 클래스명 extends 부모클래스명{
                             ..........
                 }

                <실습> 
                사람클래스를 생성하고, 
                사람의 기능을 상속받는 학생클래스와 선생클래스 생성하기



                ** 상속 시에 생성자는 상속되지 않는다.
                상속 시 주의할 점
                        - 다중 상속은 지원되지 않는다.
                                : my클래스가 A클래스와 B클래스를 둘 다 상속받는 것이 불가능하다
                                : A와 B가 O클래스를 동시에 상속받고 있다라고 한다면...
                                : O에 x변수가 A와 B에 다 존재
                                : 이 상태에서 my가 상속받는다면 x라는 것이 2개가 생성 - 다중상속의 문제점
                                : 중복되는 필드가 있다면 여러 개가 된다
                                : JAVA에서는 지원하지 않는다(C++이나 다른 곳에서는 사용)
 
                        - 클래스 앞 final 키드는 다른 클래스가 상속 불가

                                : 부모클래스(슈퍼클래스) - 상속해주는 
                                : 자식클래스(서브클래스) - 상속받는

                         < 예시실습 >

final 상속 불가


        (2) 오버라이딩
                오버라이딩?
                       : 자식클래스에서 부모클래스로부터 받아온 메서드를 재정의하는 것

                사용목적?
                       : 자식에 맞는 기능으로 맞춰 동작하기 위해

           ---------------------------------------------
                 오버로딩 : 메서드 중복정의
                      - 함수의 시그니처
                      > 함수명
                      > 매개변수 개수
                      > 매개변수 타입

                 오버라이딩 : 메서드 재정의
                      - 상속관계에 있는 자식클래스가 부모클래스의 메서드를
                         다시 정의하는 것


                 <실습>
                 리더 클래스를 생성하고 이전에 생성했던 학생 클래스를
                 상속받아 say()메서드를 다음과 같이 재정의하기

부모클래스의 say() 호출 x 오버라이딩만


               
                 -단, 리더클래스의 say()에서 부모(학생)클래스의 say() 호출하기

부모 클래스의 say()도 호출



                 부모 클래스의 필드 사용 방법? : super
                 자식 클래스 내 필드 사용 방법? : this


        (3) 상속과 생성자
                 super() 
                     : 부모클래스의 생성자 호출

                     - 무조건 자식클래스의 생성자 첫 줄에서 이루어짐
                     - 작성하지 않을 시, 컴파일러가 자동 호출

                 <실습>

디폴트 생성자 호출하지 않을 시
디폴트생성자 호출 혹은 부모클래스의 매개변수 직접 호출


                 ** 자식클래스에서 생성자 호출 시,
                    부모클래스의 디폴트 생성자가 자동으로 호출되기 때문에
                    부모의 디폴트 생성자가 존재해야 한다.
                     1. 부모 클래스에 디폴트 생성자를 생성
                           => Car(){ }
                     2. 부모 클래스의 매개변수를 자식 클래스에서 
                        호출할 것만 콕 집어 직접 호출해서 생성
                           =>  super( x );
                                 this.x = x;

          ---------------------------------------
               Object 클래스?
                      모든 클래스의 조상클래스


                     <실습1>

일반 클래스의 슈퍼클래스는 Object다

 


                     <실습2>


                      ToString()
                      equals()
                      getClass()