본문 바로가기
Back End/JAVA

JAVA/ Down Casting 상속받는 자식 클래스로 캐스팅

by healingmau 2022. 7. 5.

 

Down Casting 상속받는 자식 클래스로 캐스팅

 

1. Casting(캐스팅) 이란?

캐스팅은 타입을 변환하는 것으로

형변환이라고도 합니다.

 

자바의 상속 관계에 있는 

부모 클래스와 자식 클래스간에

형 변환이 가능합니다.

 

2. Down Casting(다운 캐스팅)이란?

다운캐스팅은 자신의 고유한

특성을 잃은 서브 클래스의 객체를

다시 복구 시켜주는 것입니다.

 

상속받은 자식 클래스로 캐스팅!

 

Up Casting(업 캐스팅) 된 것을 다시

원상태로 돌립니다.

 

부모 클래스와 자식 클래스가

상속이 되어있는

상속 관계에서만 가능합니다.

 

상위 클래스(부모 클래스) Animal

 

public class Animal {
	
	private String name;
	
	public void cry() {
		System.out.println(name + "가 소리를 낸다.");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

 

하위 클래스(자식 클래스) Dog

 

public class Dog extends Animal{
	
	// String name;
	 
	// Animal 클래스의 함수도 모두 상속받는다.
	
	@Override
	public void cry() {
		super.cry();
		System.out.println(getName() + "가 멍멍하고 짓습니다.");
	}
	
	void run() {
		System.out.println(getName() + "가 달린다.");
	}
}

 

 하위 클래스(자식 클래스) Cat

 

public class Cat extends Animal {
	
//	private String name
	// Animal 클래스의 함수도 모두 상속받는다.
	
	@Override
	public void cry() {
		// TODO Auto-generated method stub
		super.cry();
		System.out.println("냥냥~~");
	}
	
	public void grooming() {
		System.out.println("그루밍 한다.");
	}
		
}

 

public class AnimalAction {
	// Animal 클래스를 함수의 파라미터로 쓸 수 있다.
	// 즉, Animal 클래스의 객체가 올 수 있다.
	// 함수의 파라미터를 최상위 클래스로 받아오면
	// 객체를 animal로 인식하기때문에 다 받아올 수 있다.
	// Animal animal = new Dog();
	// Animal animal = new Cat();
	void action(Animal animal) {
		animal.cry();
		// DownCasting이란 상속받은 자식클래스로 캐스팅하는 것. (상속관계이어야만 함)
		// animal의 instance(객체가 Heap 메모리에 올라온 상태)가
		// Dog면 Dog로바꾸고 run() 함수를 실행
		// Cat이면 Cat으로 바꾸고 grooming을 실행해라.
		if(animal instanceof Dog) {
			((Dog)animal).run();
		} else if(animal instanceof Cat) {
			((Cat)animal).grooming();
		}
		
	}

}
// 결과

강아지가 소리를 낸다.
강아지가 멍멍하고 짓습니다.
강아지가 달린다.
------------------------------
키티가 소리를 낸다.
냥냥~~
그루밍 한다.

 

상위 클래스를 extends 하지 않습니다.

 

Up casting(업 캐스팅)이 된

상태에서는 자식 클래스에 있는

함수를 사용할 수 없습니다.

 

따라서 Down Casting(다운 캐스팅)으로

자식 클래스의 객체를 복구합니다.

 

((Dog)animal).run()

((Cat)animal).grooming()

 

힐링아무의 코딩일기!!

'Back End > JAVA' 카테고리의 다른 글

Java/ UpCasting 데이터타입을 부모 클래스로 선언  (0) 2022.07.05

댓글