본문 바로가기
Java/기초

[java 기초] 타입변환과 다형성

by Meaning_ 2021. 6. 30.
728x90
반응형

<객체의 타입 변환>

 

- 참조타입 데이터도 기초타입 데이터 처럼 타입 변환 가능

- 상속 관계일 경우만 타입변환 가능

- 자동타입 변환과 강제 타입변환이 있다. 

 

<자동타입 변환 예시>

 

<person클래스>

<student 클래스>

p=s;는 사실상 (Person)s 와 같다. '학생은 사람이다' 가 가능하므로 위와 같은 형변환은 가능하다

 

<강제 타입변환 예시>

이런 경우는 '사람은 학생이다' 가 되므로 형변환 불가능

 

하지만 이런식으로 코드를 작성하게 되면 부모타입의 변수이지만 자식 객체를 가리키므로 형변환이 가능하다.

 

<InstanceOf 타입>

 

'변수 instnaceof 타입 '

 

변수는 bool값을 반환한다. 자식객체이면 true, 아니면 false를 반환한다.

 

이 경우 true,true,false 가 된다 

 

위의 코드는  downcast 함수를 추가 해봤다. downcast의 인자에 Student 타입의 참조변수 s를 넣어준다.

 downcast의 매개변수로 이동할 때, Person은 new Person() 타입이지만 매개변수로 들어오는 참조변수는 s이고 이것의 타입은 Student이기 때문에 사실상 객체로 설정된 매개변수 p의 타입은 new Student() 타입이 된다.

r그렇기에 p는 Student와 자식관계가 되고, "ok,하향 타입 변환" 문장이 출력될 수 있다. 

 

 

자식객체를 부모타입 변수에 대입하면 부모 클래스에 선언된 멤버만 볼 수 있음

하지만 자식 클래스가 부모 클래스를 오버라이딩 했다면 부모 클래스에 선언된 멤버는 보이지 않고,자식 객체의 메서드만 보이게됨.

--> 변수와 실제 메서드를 실행 도중에 연결하는 것을 동적바인딩이라고 함.

 

<타입 변환을 이용한 예제>

<콘솔 창>

필드나 정적 메서드는 부모타입이 호출된다.

whoami함수의 경우는 v의 실제타입이 Car이므로 Car의 메서드가 호출된다. 

728x90
반응형

'Java > 기초' 카테고리의 다른 글

[java기초] 인터페이스  (0) 2021.06.30
[java기초] 추상 메서드  (0) 2021.06.30
[java기초] final 메서드  (0) 2021.06.30
[java기초] 클래스 접근 지정  (0) 2021.06.30
[java기초] 자식클래스와 부모생성자  (0) 2021.06.30

댓글