다형성
- 사용방법은 동일하지만(동일한 메서드를 갖음) 실행결과가 다르게 나오는(메서드 오버라이딩에 의해) 성질
- 자동타입변환 + 메서드 오버라이딩 -> 다형성
1. 장점
- 단일 메서드를 다른 클래스에서 다르게 사용 가능
- 동일한 구현에 대해 다른 메서드명 선언 필요 없음
- 상속 쉽게 구현 가능
2. 단점
- 코드 가독성이 떨어질 수 있다.
- 메서드 오버라이딩의 경우 컴파일러 실행 중 메서드 반환 유형을 결정하면서 시스템 성능이 저하된다.
3. 종류

1). 메서드 오버로딩
- 메서드명이 같지만 다른 매개변수를 사용(인수의 개수나 유형 변경 가능)
2). 메서드 오버라이딩
- 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의 하여 사용
4. 사용 조건
1). 상속 관계
2). 오버라이딩(자식 클래스에서 메소드 재정의)
- 하위 클래스 메소드가 반드시 재정의되어 있어야 한다.
3). 업캐스팅 (자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것)
- 부모 타입으로 자식클래스를 업캐스팅하여 객체를 생성해야 한다.
객체 타입 확인
boolean result = 객체 instanceof 타입;
좌항의 객체와 우항의 타입이 같으면 true, 아니면 false를 반환한다.
어떤 타입에 대한 instanceof연산의 결과가 true 라는 것은 검사한 타입으로 형변환이 가능하다.
예시

자동 타입 변환
부모타입 변수 = 자식타입객체;
- 상속 계층에서 상위타입이면 자식타입객체는 부모의타입으로 자동 변환된다.
- 부모타입으로 자동 변환된 이후에는 부모 클래스에 선언된 필드와 메서드만 접근이 가능하다.
- 변수는 자식 객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정된다.
- 자식클래스에서 오버라이딩된 메서드가 있다면 부모 메서드가 아닌 오버라이딩된 메서드가 호출된다.
강제 타입 변환
- 부모 타입은 자식 타입으로 자동 변환되지 않지만 캐스팅 연산자로 강제 타입 변환 가능하다
(자식 객체가 부모 타입으로 자동 변환 된 후 자식 타입으로 변환할때 가능)
자식타입 변수 = (자식 타입) 부모타입객체;
- 자식 객체가 부모 타입으로 자동 변환 시 부모 타입에 선언된 필드와 메서드만 사용 가능하기에 자식 타입 필드와 메서드를 사용하려면 자식 타입으로 강제 타입 변환을 해야한다.