본문 바로가기
IT/Java

Polymorphism

by 봉즙 2019. 6. 26.

다형성

  • 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조 할 수 있도록 한다
  • 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야한다.
  • 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있으나 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수 는 없다.

 

참조변수의 형변환

서로 상속 관계에 있는 클래스사이에서만 형변환이 가능하다.

자손타입 -> 조상타입 (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

댓글