본문 바로가기
Java

[Java] 다운캐스팅(Downcasting)

by eyoo 2022. 7. 5.

다운캐스팅은 상속받은 자식클래스로 캐스팅하는것이다.

# 자식 클래스로 캐스팅하는것은 실제 메모리의 객체로 바꾸는것이다.

 

먼저 부모클래스가 되는 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;
	}
}

 

 

그 후 Animal 클래스를 상속받는 Dog 클래스를 만들어준다.

 

public class Dog extends Animal {
	
//	String name;
	
	// Animal 클래스의 함수를 상속받았다.
	
	@Override
	public void cry() {
		// TODO Auto-generated method stub
		super.cry();
		System.out.println("멍멍왈왈월월");
	}
	
	public void run() {
		System.out.println(getName()+"(이)가 뛴다.");
	}
}

 

 

또 Animal 클래스를 상속받는 Cat 클래스를 만들어준다.

 

public class Cat extends Animal {
	
//	String name;
	
	// Animal 클래스의 함수를 상속받았다.
	
	@Override
	public void cry() {
		// TODO Auto-generated method stub
		super.cry();
		System.out.println("야옹");
	}
	
	void grooming() {
		System.out.println(getName()+"(은)는 그루밍 한다.");
	}
}

 

 

그 후 AnimalAction을 만들고 다운캐스팅 한다.

 

public class AnimalAction {
	
	// Animal 클래스의 객체가 온다.
	// 함수의 파라미터로 최상위 클래스로 받아주는데 오면 넘겨줄수있다.
	void action(Animal animal) {  
		
		animal.cry();
		
		// Animal의 인스턴스 (클래스가 heap메모리에 올라온 상태(객체))가 개일때 
		if (animal instanceof Dog) {
			((Dog)animal).run();
		} else if (animal instanceof Cat) {
			((Cat)animal).grooming();
		}
	}
}

# action 함수를 만들때 (Animal animal) 으로 부모클래스를 캐스팅하여 업캐스팅 해준다. ( Animal animal = new Dog() 과 비슷한 원리다.)

# if문과 instanceof를 활용하여 다운캐스팅한다.

# instanceof는 어떤 객체일때를 정해주는것이다.

 

 

메인 클래스에서 확인해보자.

 

in:

public class AnimalMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		AnimalAction aa = new AnimalAction();
		
		Dog d = new Dog();
		d.setName("바둑이");
		
		aa.action(d);
		
		System.out.println("---------------");
		
		Cat c = new Cat();
		c.setName("나비");
		
		aa.action(c);

	}
}

out:

# action 함수에서 자식클래스를 받을때마다 각각 다르게 출력된다.

 

 

 

 

 

댓글