본문 바로가기

Language/JAVA

JAVA - DOWN CASTING

반응형
DOWN CASTING

 

 

 

 

 

상위 클래스 Animal

 

 

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

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

	
	
}

 

 

 

하위클래스 Dog

 

public class Dog extends Animal {

//	private String name
	// Animal 클래스의 함수도 모두 상속받는다.
	
	@Override
	public void cry() {
		// TODO Auto-generated method stub
		super.cry();
		System.out.println("멍멍멍~~~");
	}
	
	public 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("그루밍 한다.");
	}
	
	

}

 

 

 

 

 

DownCasting을 실행하기위한 클래스

 

(상위클래스를 extends 하지 않는다.)

 

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

}

 

 

 

실행할 main 클래스

 

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

}

 

반응형

'Language > JAVA' 카테고리의 다른 글

JAVA - Interface  (0) 2022.07.06
JAVA - Abstract (추상클래스)  (0) 2022.07.06
JAVA - Up Casting  (0) 2022.07.05
JAVA - 부모(상위)생성자 호출을 위한 super 사용법  (0) 2022.07.05
JAVA - EXTENDS (상속)  (0) 2022.07.04