참조변수의 형변환은 서로 상속관계에 있는 클래스 사이에서만 가능합니다.
자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조변수를 자손타입의 참조변수로의 형변환이 가능합니다.
기본형 변수의 형변환에서 작은 자료형에서 큰자료형으로의 형변환은 생략이 가능하듯이, 참조형 변수의 형변환에서도 자손타입의 참조변수를 조상타입의 참조변수로
형변환할때는 생략이 가능합니다.
자손타입 -> 조상타입 (Up-casting) : 형변환 생략가능
자손타입 <- 조상타입 (Down-casting) : 형변환 생략불가
형변환은 참조변수의 타입을 변환하는 것이지 인스턴스를 변환하는 것은 아니기 때문에 참조변수의 형변환은 인스턴스에 아무런 영향을 미치지 않습니다.
단지 참조변수의 형변환을 통해서, 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절하는 것뿐입니다.
계속해서 instanceof 연산자에서 알아보겠습니다.
참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof연사자를 사용합니다. 주로 조건문에 사용되며, instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입이 피연산자로 위치합니다.
그 연산의 결과로는 true와 false를 리턴하는데, instanceof가 true라는 것은 참조변수가 검사한 타입으로 형변환이 가능하다는 의미입니다.
메서드인 method()의 경우는 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입인 NewChild클래스에 정의된 메서드가 호출되지만, 인스턴스변수인 x는 참조변수의 타입에 따라서 달라지는걸 보실 수 있습니다.
자손클래스 Child1에 선언된 인스턴스변수 x와 조상 클래스 Parent1로부터 상속받은 인스턴스변수 x를 구분하는데 참조변수 super와 this가 사용됩니다. 자손인 Child1클래스에서의 super.x는 조상 클래스인 Parent1에 선언된 인스턴스변수 x를 뜻하며, this.x 또는 x는 Child클래스의 인스턴스변수 x를 뜻합니다. 그래서 위 결과에서 x와 this.x의 값이 됩니다.
참조변수의 다형적인 특징은 메서드의 매개변수에도 적용됩니다.
인터페이스 ( interface ) (0) | 2019.03.30 |
---|---|
추상클래스(abstract class) (0) | 2019.03.30 |
제어자(Modifier), 접근제어자(access modifier), static, final, abstract, 다형성 (0) | 2019.03.13 |
클래스의 관계, 단일 상속, Object 클래스, 오버라이딩, super, super() (0) | 2019.03.12 |
자바강좌 - 상속(inheritance) 1 (0) | 2019.03.12 |
댓글 영역