java

실습) 추상 클래스 활용 1

dalc3154 2025. 2. 27. 17:49
// 추상 클래스
// 모바일 어플리케이션
abstract class MobileApp{
	// 추상 메소드: 실행에 대한 동작 정의
	// 각 앱마다 '고유한 실행' 정의 - 상속받은 클래스에서 구현
	abstract void execute();
	
	// 일반 (구현 메소드)
	void appInfo() {
		System.out.println("This is a mobile app");
	}
}

// 게임 어플리케이션
class GameApp extends MobileApp{
	// 추상 메소드 구현
	@Override
	void execute() {
		System.out.println("Game app executes");
	}
}

// SNS 어플리케이션
class SocialApp extends MobileApp{

	String name;
	
	SocialApp(String name){
		this.name = name;
	}
	
	@Override
	void execute() {
		System.out.println(name + " app executes");
	}
	@Override
	void appInfo() {
		System.out.println(name + " app is most popular social app");
	}
	
	//socialApp 고유 메소드
	void shareContent(String content) {
		System.out.println(name + " shares: " + content);
	}
}

public class E_Practice {
	public static void main(String[] args) {
		// 다형성 적용
		MobileApp gameApp = new GameApp();
		MobileApp socialApp = new SocialApp("Instagram");
		
		// 다형성 적용에 의해 공통된 메소드 호출 가능
		gameApp.execute();// Game app executes
		gameApp.appInfo();// This is a mobile app
		
		socialApp.execute();// Instagram app executes
		socialApp.appInfo();// Instagram app is most popular social app
		
		// socialApp.shareContent("images");
		// 업캐스팅 시 하위 클래스의 고유 메소드에 접근 불가
		
		// 형 변환
		if (socialApp instanceof GameApp) {
			System.out.println("socialApp이 GameApp 타입의 객체");
			GameApp onlyGameApp = (GameApp) socialApp;
		} else if (socialApp instanceof SocialApp){
			System.out.println("socialApp이 SocialApp 타입의 객체");
			SocialApp onlySocialApp = (SocialApp) socialApp;// 다운캐스팅
			
			onlySocialApp.shareContent("images");// Instagram shares: images
			
			// 객체 배열 & 다형성 활용
			
			MobileApp[] apps = {
					// 생성과 동시에 업캐스팅 - 묵시적 형 변환
					new GameApp(),
					new SocialApp("FaceBook"),
					new SocialApp("KakaoTalk")
			};
			
			for (MobileApp app : apps) {
				app.execute();
				app.appInfo();
				
				if (app instanceof SocialApp) {
					// 다운캐스팅
					SocialApp specificSocialApp = (SocialApp) app;
					specificSocialApp.shareContent("Files");
				}
			}
		}
	}
}

'java' 카테고리의 다른 글

28. 예외(Exception)  (0) 2025.03.05
실습) 추상 클래스 활용2  (0) 2025.02.27
27. 인터페이스(Interface)  (0) 2025.02.27
26. 추상화(Abstract)  (0) 2025.02.27
25. 다형성 (Polymorphism)  (0) 2025.02.27