package CHAPTER06;

//부모 클래스 (User)
class User2 {
	// 로그인 메서드 (모든 사용자에게 공통)
	void login() {
		System.out.println("사용자가 로그인합니다.");
	}
}

//자식 클래스 (Admin) - User 클래스를 상속받음
class Admin2 extends User2 {
	// 관리 기능 추가 (Admin만 사용할 수 있는 기능)
	void manageSystem() {
		System.out.println("관리자가 시스템을 관리합니다.");
	}
}

//실행 클래스 (main 메서드 포함)
public class DowncastingExample {
	public static void main(String[] args) {
		// 업캐스팅 (Upcasting): 부모 클래스 타입으로 자식 객체 참조
		User2 user2 = new Admin2(); // 자동 형 변환 (Upcasting)
		user2.login(); // 부모 클래스의 메서드 호출 가능

		// 다운캐스팅 수행 (명시적 형 변환)
		if (user2 instanceof Admin2) { // 타입 검사
			Admin2 admin2 = (Admin2) user2; // 다운캐스팅
			admin2.manageSystem(); // 정상적으로 실행됨
		}
	}
}
