[JAVA] 다형성

Sangho Kim·2022년 9월 27일
0

JAVA

목록 보기
10/17

다형성이란?

하나의 객체가 여러가지의 타입을 가질 수 있는 것
다형성은 상속, 추상화와 함께 객체 지향 프로그래밍에서 중요한 특징 중 하나이다.

Tv => 부모 타입, SmartTv => 자식 타입 일때

부모 타입 참조 변수로 자식 타입 객체를 다루는 것

ex)

Tv t = new SmartTv();

단, 자식 타입의 참조변수로 부모 타입의 객체를 가리킬 수 없다.

Tv t = new SmartTv(); // 허용
SmartTv t = new Tv(); // 허용X
  • 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 많기 때문에 자식 클래스 타입의 참주 변수로는 부모 클래스 타입의 인스턴스를 참조 할 수 없다.

정리하자면

  1. 같은 타입의 인스턴스 참조 (O)
  2. 부모 -> 자식 인스턴스 참조 (O)
  3. 자식 -> 부모 인스턴스 참조 (x)
  • 클래스는 상속을 통해 확장, 유지는 가능하지만 축소는 되지 않기 때문에 자식 클래스에서 사용할 수 있는 멤버의 개수가 부모 클래스와 언제나 같거나 많다.

다형성을 사용하는 이유

유지보수가 쉽다.

  • 여러 객체를 하나의 타입으로 관리 할 수 있기 때문에 코드 관리가 편해져 유지보수가 쉽다.

결합도 하락

  • 클래스간의 의존성이 줄어들어 결합도가 낮아지고 독립성이 강해진다.


다형성 예제 코드

class MobilePhone {
    protected String number;

    public MobilePhone(String num) {
        number = num;
    }
    public void answer() {
        System.out.println("Hi~ from " + number);
    }
}
class SmartPhone extends MobilePhone {
    private String androidVer;

    public SmartPhone(String num, String ver) {
        super(num);
        androidVer = ver;
    }
    public void playApp() {
        System.out.println("App is running in " +
                androidVer);
    }
}
public class dkd {

    public static void main(String[] args) {
        SmartPhone ph1 =
                new SmartPhone("010-555-777",
                        "Nougat");
        MobilePhone ph2 =
                new SmartPhone("010-999-333",
                        "Nougat");
        ph1.answer();
        ph1.playApp();
        System.out.println();

        ph2.answer();
        // ph2.playApp();
    }
}

출력 결과

Hi~ from 010-555-777
App is running in Nougat

Hi~ from 010-999-333
profile
Immediately, certainly, until it becomes.

0개의 댓글