다형성이란 하나의 객체가 여러타입을 가질 수 있는 것을 의미함.
자바에서 다형성은 부모타입의 참조변수로 자식 클래스의 인스턴트를 참조 할 수 있는 것으로 구현하고 있다.
Parent 클래스와 Parnet 클래스를 상속받는 Child 클래스가 있다.
참조변수가 Parent인것은 Parent 인스턴트를 참조 할 수 있다.
(멤버의 개수 = 인스턴트 멤버의개수)
참조변수가 Child인것은 Child 인스턴트를 참조 할 수 있다.
(멤버의 개수 = 인스턴트 멤버의개수)
참조변수가 Parent인것은 Child 인스턴트를 참조 할 수 있다.
(멤버의 개수 < 인스턴트 멤버의개수)
참조변수가 Child인것은 Parent 인스턴트를 참조 할 수 없다.
(멤버의 개수 > 인스턴트 멤버의개수)
=> 부모타입의 참조변수로 자식타입의 인스턴트를 참조할 수 있지만, 자식타입의 참조변수로 부모타입의 인스턴트를 참조 할 수 없다.
+ 참조변수가 사용할 수 있는 멤버의 개수는 인스턴트의 멤버의 개수보다 같거자 적어야한다.
Parent 클래스의 멤버는 int a, b이다
Child 클래스는 Parent 클래스를 상속 받고 int c를 멤버로 갖는다
Parent의 인스턴트 맴버 = a, b
Child의 인스턴트 멤버 = a, b, c
parent2 참조변수는 Child를 참조하고 있으나 Parent에 인스턴트 멤버 c가 없기 때문에 참조할 수 없다.
같은 타입의 인스턴트를 참조하지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 수가 달라진다.
Parent형 참조변수 parent는 Child 인스턴트를 참조하고 있다 parent->Child
= c에 접근 불가능!
Child형 참조변수는 parent가 참조하는 것을 참조한다 child->Child
= c에 접근가능!
참조변수의 형변환
위에서 말했듯이 참조변수의 형태에 따라서 접근할 수 있는 멤버의 개수가 달라진다고 했다. 따라서 Child형 참조변수는 Child 인스턴스를 참조할 때 모든 멤버를 사용할 수 있지만 Parent형은 참조변수를 모두를 사용할 수는 없다
child = parent에서 parent의 참조변수형을 child로 바꿔주어야 모든 멤버를 사용 할 수 있을것이다.
부모타입->자식타입
이것을 다운캐스팅 = 명시적 형변환 이라고 한다.(생략불가)
자식타입->부모타입
이것을 업캐스팅 = 묵시적 형변환 이라고 한다(생략가능)
참조변수 instanceof 클래스이름
참조변수가 실제로 참조하고 있는 타입이 클래스이름이면 true를 반환하고 그렇지않으면 false를 반환한다
'Old > JAVA ' 카테고리의 다른 글
JAVA 추상클래스(abstract) (0) | 2018.09.04 |
---|---|
JAVA this와 super 키워드 (1) | 2018.08.22 |
JAVA 상속 (0) | 2018.08.21 |
JAVA Static(정적변수와 정적메서드) (0) | 2018.08.21 |
JAVA 초기화와 생성자 (0) | 2018.08.21 |