다형성이란
여러 개의 형태를 갖는다라는 의미를 가지고 있다
상속을 이용한 기술로
부모 타입으로부터 파생된 여러 가지 타입의 자식 객체를 부모 클래스 타입 하나로 다룰 수 있다
class SmartPhone extends MobilePhone {....}
스마트폰은 모바일폰이다.
SmartPhone phone = new SmartPhone("010-555-777", "Nougat");
따라서 스마트폰 참조변수로 스마트폰 참조 가능하다
MobilePhone phone = new SmartPhone("010-555-777", "Nougat");
모바일폰 참조변수로 스마트폰 참조도 가능하다.
참조변수 간 대입과 형 변환
class Cake {
public void sweet() {...}
}
class CheeseCake extends Cake {
public void milky() {...}
}
CheeseCake ca1 = new CheeseCake();
Cake ca2 = ca1; 가능하다.
Cake ca3 = new CheeseCake();
CheeseCake ca4 = ca3;
불가능하다
업 캐스팅(Up Casting) :
상속 관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가
모든 자식 타입의 객체 주소를 받을 수 있다.
* 자식 객체의 주소를 전달 받은 부모타입의 참조변수를 통해서 사용할 수 있는
후손의 정보는 원래 부모타입이었던 멤버만 참조가 가능하다
다운 캐스팅(Down Casting) :
자식 객체의 주소를 받은 부모 참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우
부모 클래스 타입의 참조형 변수를 자식 클래스 타입으로 형 변환하는 것
Car c = new Sonata();
((Sonata)c).moveSonata();
클래스 간의 형 변환은 반드시 상속 관계에 있는 클래스끼리만 가능하다
instanceof 연산자 :
현재 참조형 변수가 어떤 클래스 형의 객체 주소를 참조하고 있는지 확인 할 때 사용
클래스 타입이 맞으면 true, 맞지 않으면 false 반환
if(레퍼런스 instanceof 클래스타입) {
//true일때 처리할 내용, 해당 클래스 타입으로 down casting }
형변환
if(c instanceof Sonata) { ((Sonata)c).moveSonata();
} else if (c instanceof Avante){
((Avante)c).moveAvante();
} else if (c instanceof Grandure){
((Grandure)c).moveGrandure();
}
인스턴스 변수는 오버라이딩 되지 않는다. 따라서 참조변수의 형에 따라 접근하는 멤버가 결정된다.
객체배열과 다형성
다형성을 이용하여 상속 관계에 있는 하나의 부모 클래스 타입의 배열 공간에
여러 종류의 자식 클래스 객체 저장 가능
Car[] carArr = new Car[5];
carArr[0] = new Sonata();
carArr[1] = new Avante();
carArr[2] = new Grandure();
carArr[3] = new Spark();
carArr[4] = new Morning();
다형성을 이용하여 메소드 호출 시 부모타입의 변수 하나만 사용해 자식 타입의 객체를 받을 수 있음
public void execute() {
driveCar(new Sonata());
driveCar(new Avante());
driveCar(new Grandure());
}
public void driveCar(Car c) {}
'Java' 카테고리의 다른 글
7월 15일 KH 시험 대비 복습 자바,변수,(조건문/반복문) (0) | 2024.07.01 |
---|---|
자바 MVC 패턴 문제 객체 배열을 적용해서 풀이하기 (0) | 2024.07.01 |
Java 예외처리 (0) | 2024.06.29 |
Java 인터페이스 정의 인터페이스를 이용한 실습 예제_2 (0) | 2024.06.28 |
Java 인터페이스 정의 인터페이스를 이용한 실습 예제_1 (0) | 2024.06.27 |