///////
Search

다형성(ploymorphis)

태그
장서윤
자바기초
작성일
2022/09/26

다형성(ploymorphis)

객체지향 프로그래밍의 특징 중 하나로 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다(오버라이드와 다형성은 같이 움직인다)
: 객체들의 타입이 다르면 똑같은 메시지가 전달 되더라도 서로 다르게 동작하는 것이며 다형성을 구현하는 여러가지 방법중에서 대표적으로 오버로딩, 오버라이딩, 함수형 인터페이스가 있다.

01. 사용

업캐스팅(upcasting, 상형 형변환) : 하위 객체를 상위 클래스형 변수에 대입
상위 클래스 = 하위 클래스
부모 = 자식
//업캐스팅 Shape s2 = new Rectangle(); s2.draw(); //사각형 출력
Plain Text
복사
//배열 -> 하단의 03.일반화 그림 참고 Shape[ ] s = new Rectangle[ ]
Plain Text
복사

02. 다형성 구현의 예

상속에서의 다형성 '재정의 Override' : 반드시 상속관계에서 상위 클래스(부모클래스)와 함수명은 동일하게 사용하면서 함수안의 내용을 다르게 하여 재정의 하는것이다.(덮어 쓰는 것) ❗️함수안의 내용이외의 매개변수, 데이터 타입 등 모두 일치해야한다.❗️
하위클래스(자식)는 상위클래스(부모)를 상속받기 때문에 인스턴스화(객체) 할 때 상위 클래스가 먼저 생성자를 통해 메모리에 올라가고 그 다음으로 하위 클래스가 메모리에 올라간다.
따라서 person p1 = new Student(); 상위 클래스로 업캐스팅한 경우에는 오버라이드를 하지 않은 하위클래스의 다른 메서드를 사용할 수 없다.
(Person.class에는 showInfo()가 없기 때문에 사용할 수 없음)
오버라이딩은 자식꺼
부모 = 자식

03. 일반화

배열은 같은것만 담아줄 수 있기 때문에 만약 다형성 개념이 없다면 배열을 각각 모두 만들어줘야한다. ex) 삼각형[ ] = new 삼각형[ ], 원형[ ] = new 원형[ ] ...
: 다형성을 통해 객체를 일반화 시킬 수 있다 (삼각형, 원형, 사각형을 도형이라는 한 배열로 관리할 수 있다 = 자식 클래스를 모클래스 한 배열로 관리할 수 있다.)