JAVA-Basic

5.추상클래스와 상속관계의 Promotion & Casting

Jungsoomin :) 2020. 7. 10. 11:41

추상클래스 생성

//abstract 선언으로 추상클래스 즉 개념을 만든다.
public abstract class KindaCat {
	
	//abstract 선언으로 추상메소드 즉 행동 개념을 만든다.
	public abstract void sound() ;
	
	// 선언으로 이 메소드들이 보장된다는 확인을 받는다.<<<<<
}

자식객체

public class Tiger extends KindaCat{
	
	//추상클래스 상속 객체는 반드시 메서드 오버라이딩으로 다형성을 위한 보장을 받아야한다.
	@Override
	public void sound() {
		System.out.println("어흥");
	}
	public void hunt() {
		System.out.println("사냥을합니다.");
	}
}
public class Cat extends KindaCat{
	
	//추상클래스 상속 객체는 반드시 메서드 오버라이딩으로 다형성을 위한 보장을 받아야한다.
		@Override
		public void sound() {
			System.out.println("야옹");
		}
}

 

 

메인메서드

public class Main {

	public static void main(String[] args) {
//		KindaCat kindaC = new KindaCat();
//		kindaC.sound(); 컴파일에러, 추상클래스는 객체화할 수 없다.
		
		Cat cat1 = new Cat();
		cat1.sound();
		
		
		
		Tiger tig1 = new Tiger();
		tig1.sound();

		
		tig1.hunt();//자식객체의 메서드 실행
		//kindaC.hunt(); 컴파일에러, 부모객체에 정의된 것만 사용가능하다.
		
		//자식타입의 프로모션
		KindaCat kc = new Tiger();
		//부모타입에 프로모션이 되어야 다시 자식타입으로 캐스팅이 가능하다.
		//프로모션 과정없이 캐스팅이 들어간다면 부모타입은 자식객체에 대한 보장을 받지 못하므로 ClassCastException이 발생한다.
		Tiger tig2 = (Tiger)kc;
	}
	
	//다형성의 구현<<<<<<<<<
	private static void printCry(KindaCat c) {
		//자식객체의 부모타입 프로모션을 보면, 안전하게 값을 대입할 수 있으며 다른 결과를 얻을 수도 있게된다.
		c.sound();
	}
}