다형성(ploymorphis)
객체지향 프로그래밍의 특징 중 하나로 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다(오버라이드와 다형성은 같이 움직인다)
: 객체들의 타입이 다르면 똑같은 메시지가 전달 되더라도 서로 다르게 동작하는 것이며 다형성을 구현하는 여러가지 방법중에서 대표적으로 오버로딩, 오버라이딩, 함수형 인터페이스가 있다.
01. 사용
•
업캐스팅(upcasting, 상형 형변환)
: 하위 객체를 상위 클래스형 변수에 대입
•
상위 클래스 = 하위 클래스
•
부모 = 자식
//업캐스팅
Shape s2 = new Rectangle();
s2.draw(); //사각형 출력
Plain Text
복사
//배열 -> 하단의 03.일반화 그림 참고
Shape[ ] s = new Rectangle[ ]
Plain Text
복사
02. 다형성 구현의 예
상속에서의 다형성 '재정의 Override'
: 반드시 상속관계에서 상위 클래스(부모클래스)와 함수명은 동일하게 사용하면서 함수안의 내용을 다르게 하여 재정의 하는것이다.(덮어 쓰는 것)
❗️함수안의 내용이외의 매개변수, 데이터 타입 등 모두 일치해야한다.❗️
(Person.class에는 showInfo()가 없기 때문에 사용할 수 없음)
•
오버라이딩은 자식꺼
•
부모 = 자식
03. 일반화
배열은 같은것만 담아줄 수 있기 때문에 만약 다형성 개념이 없다면 배열을 각각 모두 만들어줘야한다.
ex) 삼각형[ ] = new 삼각형[ ], 원형[ ] = new 원형[ ] ...
: 다형성을 통해 객체를 일반화 시킬 수 있다
(삼각형, 원형, 사각형을 도형이라는 한 배열로 관리할 수 있다 = 자식 클래스를 모클래스 한 배열로 관리할 수 있다.)