[TIL] java 다형성

빼곰·2022년 12월 14일
0

문제

  • 다형성(polymorphism)에 대해서 개념 설명을 해보시오.
  • 아래 문제를 풀어보시오.
    • 객체 생성 방법중 틀리것은?

    class Person{}
    class Student extends Person{}

    [1] Student s1 = new Student();
    [2] Person s2 = new Student();
    [3] Person p1 = new Person();
    [4] Student s1 = new Person();

다형성이란?

  • 사전적 의미 : 다양한 형태 또는 특성을 가진다는 의미.

  • 객체 지향 언어에서 의미 : 부모 클래스를 상속 받은 자식 클래스의 인스턴스가 부모 객체로도 사용되고, 뿐만 아니라 자식 클래스의 객체로도 사용될 수 있는 다양한 상황을 의미한다.

Person s1 = new Student(); 이렇게 부모타입으로 객체 생성이 가능 하다는 이야기!

  • 예시
    부모 클래스 Bird가 있고, 이를 상속받은 자식 클래스 Parrot이 있다고 가정하자.
    이때, 사람들이 "Parrot이 말을 하네" 할 수도 있지만, 누군가는 "새가 말을 하네..허허" 이렇게 말 할 수도 있다.
    자식 클래스를 통해서 객체를 생성하고 있지만 타입을 부모 클래스로 지정 할 수 있다.

  • 결론
    하위 클래스의 인스턴스(객체)는 보다 위인 상위 클래스의 인스턴스(객체)로도 사용될 수 있다.
    반대의 경우는 안된다. 상위(부모)클래스의 인스턴스(객체)는 하위(자식) 클래스의 인스턴스(객체)로 사용될 수 없다.

코드 실습

  • 반대의 경우는 안된다!(상위클래스로 객체를 생성하면서 타입은 하위 타입을 쓰는 경우) - 에러!

사용범위

  • 자식 클래스로 생성하는 객체를 부모 타입으로 받아서 객체를 생성하면 사용범위가 어떻게 되는지 알아보자.

    다형성의 관계에서 부모,자식 클래스 자원을 어떻게 쓸 수 있을가?😎
    [1] Student_1 s1 = new Student_1(); --> 부모 + 자식 클래스의 모든 자원을 다 쓸 수 있다.
    [2] Person_1 s2 = new Student_1(); --> 범위는 부모의 자원만을 쓸 수 있다.(?)
    [3] Person_1 p1 = new Person_1(); --> 부모클래스의 자원만 쓸 수 있다
    [4] Student_1 bb =new Person(); --> 에러(Err)

  • 클래스 자원

  • [1]에서 자원 사용

<출력물>
난 부모 클래스
난 자식 클래스
오버라이딩 - AAA
sss
ppp

  • [2]에서 자원 사용 - 부모 자원만 쓸 수 있다.?

<출력물>
난 부모 클래스
오버라이딩 - AAA
ppp

  • [3]에서 자원 사용 - 부모 자원만 쓸 수 있다.

<출력물>
에이에이에이
ppp

문제 속 문제

  1. [2]에서 자식의 메서드를 바로 호출 하고 싶다면?
  2. [1]에서 자식 클래스에서 오버라이딩된 부모 클래스의 원본 메서드를 호출하고 싶다면?
  • super 키워드 사용 (2번)

    supper.method(); --> 부모의 메서드를 호출해라!!

<s1.x(); 출력물>

오버라이딩 - AAA
에이에이에이

  • 캐스트 사용(1번)

    [2]경우는 부모자원만 사용 할 수 있었다. 하지만 자식 메서드를 호출 하고 싶을 때 캐스트를 사용!

    s2. sss() ; -- 자식 메서드 바로 사용 X
    ((Student) s2).sss(); -- 캐스트 사용하면 가능 O


출처 : 인프런 예제로 공부하는 java100문제풀이 part.4

profile
개발 블로그

0개의 댓글