다형성
- 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조 할 수 있도록 한다
- 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야한다.
- 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있으나 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수 는 없다.
참조변수의 형변환
서로 상속 관계에 있는 클래스사이에서만 형변환이 가능하다.
자손타입 -> 조상타입 (up-casting) : 형변환 생략가능
자손타입 <- 조상타입 (down-casting) : 형변환 생략 불가
class Car {
String color;
int door;
void drive(){ //운전하는 기능
System.out.println("drive, Brr~~");
}
void stop(){ //멈추는 기능
System.out.println("stop!!!");
}
}
class FireEngine extends Car { //소방차
void water(){ //물뿌리는 기능
System.out.println("water!!!");
}
}
class Ambulance enxtends Car{//앰뷸런스
void siren(){ //사이렌 기능
System.out.println("siren!!!");
}
}
참조변수가 가리키는 인스턴스의 자손 타입을 형변환은 허용되지 않는다. 그렇기에 참조변수가 가리키는 인스턴스 타입을 확인하기 위해 instanceof 연산자를 사용한다.
instanceof : 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof연산자 사용, boolean타입으로 반환한다.
참조변수와 인스턴스의 연결 : 메서드의 경주 조상 클래스의 메서드를 자손의 클래스에서 오버라이딩한 경우에도 참조변수의 타입에 관계없이 항상 실제 인스턴스의 메서드(오버라이딩된 메서드)가 호출 된다. 하지만 멤버 변수의 경우 참조변수의 타입에 따라 달라진다.
'IT > Java' 카테고리의 다른 글
interface (0) | 2019.06.26 |
---|---|
abstract class (0) | 2019.06.26 |
제어자 (0) | 2019.06.25 |
Overriding (0) | 2019.06.25 |
상속, 포함 관계 (0) | 2019.06.24 |
댓글