열심히 끝까지

25강 상속과 다형성 - 다형성 개념과 다형성 관련 실습 본문

멘토씨리즈 JAVA

25강 상속과 다형성 - 다형성 개념과 다형성 관련 실습

노유림 2022. 4. 30. 21:46

25-1 ) 다형성과 다형성실습

<클래스와 객체 복습>
클래스 : 객체를 만들기 위한 설계도
객체 : 독립적으로 존재할 수 있는 것
인스턴스 : 클래스로 실제 메모리에 생성된 객체(객체가 더 포괄적인 의미)

<상속 복습>
상속 : 부모 클래스의 필드를 자식클래스가 받아오는 것
상속방법 : 
         class 클래스명 extends 부모클래스명{
                 ....
         }
접근제어자 중 
public : 어떤 패키지에 있던 간에 모두 접근 가능한 접근제어자
private : 자식이 상속받을 수 없는 필드
default : 같은 패키지 내에서만 접근 가능한 접근제어자
protected : 다른 패키지에서 자식 클래스만 접근 가능한 접근제어자

<오버라이딩 복습>
오버라이딩 : 부모클래스로부터 받아온 메서드를 자식에 맞게끔 재정의 하는 것

          (1) 다형성 개념
                  다형성 ? 
                        한 가지 타입이 여러 가지 형태의 인스턴스를 가질 수 있는 것

                  다형성의 여러 방법 : 부모 자식간의 casting(형 변환)
                         1. 업 캐스팅(upcasting)
                         2. 다운 캐스팅(downcasting)

                 1) 업캐스팅
                         : 자식 클래스의 객체가 부뫀클래스의 참조변수로 형 변환되는 것
 
                     <구조>
                           부모클래스 변수 = 자식 객체값;

                     <실습> Upcasting1

업 캐스팅 class 자료
업캐스팅 클래스 형성 및 출력




                     [ 매개변수 생성 꿀팁 ]
                      우클릭 -> Source -> Generate Constructor using Fields
                      
                      업 캐스팅 시, Student 클래스의 info()가 호출되는 이유?
                       --> 동적 바인딩 때문!


                 2) 동적 바인딩
                       : 컴파일 시점에선 부모클래스의 필드로 인지하나, 
                         런 타임 시점에선 자식 클래스의 필드로 호출할 메서드를 묶는 것
 
                       Human h1 = new Student("나길동", 17, "롤하기", 1);
                       h1.info();

                        -> 컴파일 시점 바인딩
                              <Human 클래스의 info()>
                                 void info(){
                                 System.out.println("name : " + name);
                                 System.out.println("age : " + age);
                                 System.out.println("hobby : " + hobby);
                                 }
                         -> 런타임 시점 바인딩
                               <Student 클래스의 info()>
                                  void info(){
                                         super.info();
                                         System.out.println("grade : " + grade);
                                  }

                      ==> study는 Human 클래스에서 만들지 않았기 때문에 공간 자체가 없음
                              info라는 메소드를 저장하는 공간에 자식 공간에 info가 묶인다 라고 보면 됨
                              상속 받은 자식 클래스가 오버라이딩한 메서드를 호출할 때는 
                              동적 바인딩이 적용

                      <실습> Polymorphism1

Polymorphism1 클래스 및 출력



                 3) 다운 캐스팅
                        : 업 캐스팅 된 부모 클래스의 객체가
                            자식클래스의 참조 변수로 형 변환 되는 것
                     <구조>
                             자식 클래스 변수 = (자식 클래스) 업 캐스팅 된 부모 참조 변수;
                   - 다운 캐스팅 시 주의할 점
                         1. 업 캐스팅 된 변수만 가능
                         2. 명시적 형 변환

 

downcasting 실습 및 출력

 

          (2) 다형성 실습 Polymorphism4