Back End/JAVA

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

healingmau 2022. 7. 5. 17:32

 

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()

 

힐링아무의 코딩일기!!