
객체 사용 방법은 동일하지만 실행결과가 다양하게 나오는 성질을 말한다. 다형성을 구현하는 기술은 메소드 재정의와 타입 변환이다. 자식 객체가 재정의된 메소드를 가지고 있을 경우, 부모 타입으로 자동 타입 변환 후에 메소드를 호출하면 재정의된 자식 메소드가 호출되면서 다양한 실행결과를 가져올 수 있다.
하기와 같이 형변환을 통해 다형성을 구현할 수 있다.

클래스 타입 변환 : 다른 클래스 타입으로 객체를 대입하는 것을 말한다.
자동 형변환(Up Casting, 자동 타입 변환) : 자식 객체를 부모 타입 변수에 대입할 때에는 자동으로 타입이 변환된다.
강제 형변환(Down Casting, 강제 타입 변환) : 자식 객체가 부모 타입으로 변환된 상태에서 다시 원래의 자식 타이브로 변환하고자 할 때 캐스팅() 연산자를 사용해서 강제 형변환할 수 있다.
instanceof 연산자 : 객체가 어떤 타입인지 조사할 때 instanceof 연산자를 사용한다. 주로 강제 타입 변환 전에 변환이 가능한지 조사할 때 사용한다.
Man man = new Superman(); // 자동 형변환
Superman superman = (Superman) man // 강제 형변환
[클래스 관계]

Human클래스는 Man, Woman클래스의 부모 클래스이고 Man과 Woman는 Human클래스의 자식 클래스이다.
또 Superman은 Man클래스의 자식 클래스, Woman은 Wonderwoman클래스의 부모 클래스이다.
클래스 간의 대소비교를 할 때에는 개념적으로 접근하여 부모 클래스가 크고, 자식 클래스가 작다. 그러나 사용(접근)할 수 있는 메소드는 자식 클래스가 더 많다. 왜냐하면 자식 클래스는 부모 클래스의 메소드에 접근이 가능하지만 부모 클래스는 자식 클래스의 메소드에 접근할 수 없기 때문이다. 따라서 부모 타입 변수로 자식 객체를 대입할 때에는 부모에는 없는 자식 클래스의 메소드를 사용할 수 없다. 만약 자식에 선언된 필드와 메소드를 꼭 사용해야 한다면 강제 타입 변환을 해서 사용할 수 있다.
이때 instanceof 연산자를 이용해 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인할 수 있다.
public viod method(Man man){
if(man instanceof Superman){
Superman superman = (Superman) man;
매개변수 man에는 부모인 Man타입과 자식인 Superman타입 모두 들어갈 수 있다. 만약 매개값이 Superman타입 객체라면 변환이 가능할 것이다.
기본 타입의 값을 갖는 객체를 포장(Wrapper) 객체라고 한다. 기본 타입의 값을 포장 객체로 만드는 것을 박싱(Boxing)이라고 하고, 반대로 포장 객체로부터 기본 타입의 값을 얻는 것을 언박싱(Ubboxing)이라고 한다.
기본타입 <--> wrpper클래스
// --> 박싱 / <-- 언박싱
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.