본문 바로가기
It Study/프로그래밍 공부

상속과 다형성을 활용한 java 예제 - 추상클래스 활용

by prlkt5200 2024. 9. 13.
반응형

추상클래스를 활용한 예제이며, 클래스가 조금 많으니 감안해서 봐주시면 되시겠습니다.

또 어플 폰 추상 클래스(부모클래스)를 활용한 예제입니다.

 

 

package package1;

//상속 관계이다.
public class GameApp extends Application {

	
	public GameApp(String pappName, String pcompany, int psize) {
		//부모의 생성자를 가져와서 값을 초기화해주는 것이다.
		super(pappName, pcompany, psize);
	}
	
	
	@Override
	public void appRun() {
		System.out.println(super.getAppName()+" 게임을 실행합니다.");
	}

}​
package package1;

public class Phone {
	private String phoneNumber;

	public Phone(String pphoneNumber) {
		this.phoneNumber = pphoneNumber;
	}

	void call() {
		System.out.println(this.phoneNumber + "에서 전화를 걸어 통화합니다");

	}

}

 

package package1;

public class Application {
	// 애플리케이션 속성 값을 나타내는 변수이다.
	private String appName;
	private String company;
	// 용량
	private int size;
	
	String name;


	// 애플리케이션의 기본 속성값을 초기화하기 위한 생성자이다.
	public Application(String pappName, String pcompany, int psize) {
		this.appName = pappName;
		this.company = pcompany;
		this.size = psize;
	}

	
	public String getAppName() {
		return this.appName;
	}


	public String getCompany() {
		return this.company;
	}


	public int getSize() {
		return this.size;
	}


	// 재정의용 메소드이다.
	public void appRun() {

	}

	public void stop() {
		System.out.println(this.appName + " 애플리케이션을 종료합니다.");
	}

	// 애플리케이션의 기본 속성값을 출력하는 메소드이다.
	public void displayAppinfo() {
		System.out.println("애플리케이션 이름: " + this.appName);
		System.out.println("애플리케이션 제작사: " + this.company);
		System.out.println("애플리케이션 사이즈: " + this.size);
	}

	// 재정의한 toString 메소드
	@Override
	public String toString() { 
		return "Application [appName=" + this.appName + ", company=" + this.company + ", size=" + this.size + "]";
	}

}

 

 

 

package package1;

public class UtilApp extends Application {

	public UtilApp(String pappName, String pcompany, int psize) {
		super(pappName, pcompany, psize);
	}
	
	@Override
	public void appRun() {
		System.out.println(super.getAppName()+" 유틸리티 프로그램을 실행합니다.");
	}

}

 

 

package package1;

public class SmartPhone extends Phone {

	private String model;
	// 어제 프로젝트의 도형 객체처럼 하나의 클래스를 소유하고 있는 형태이다.
	// 이 배열 내부에 pmaxAppCount 만큼의 앱을 저장할 수 있는 배열 객체를 만들 것이다.
	private Application[] apps;
	private int appCount = 0;

	// 이 생성자로 기본 속성값과 앱들을 나타내는 배열 객체의 카운트, 다시말해 스마트폰에서 최대한 가질 수 있는 수를 정한다.
	public SmartPhone(String pphoneNumber, String pmodel, int pmaxAppCount) {

		super(pphoneNumber);
		this.model = pmodel;
		this.apps = new Application[pmaxAppCount];
	}

	public String getModel() {
		return model;
	}

//	객체 통째로 알게 하는 것은 사실상 잘 안하는 행위이다. 왜?? 정보 은닉이기 때문에
	public int getAppCount() {
		return appCount;
	}

	// 어떠한 자식객체가 들어올지를 모르니 부모타입의 변수로 받는다.
	void installApp(Application papp) {
		this.apps[appCount] = papp;
		this.appCount++;
		System.out.println(papp.getAppName() + " 앱이 설치되었습니다.\n 현재: " + appCount + " 개의 앱이 설치되어 있습니다.");
	}

// 앱들을 저장한 배열을 검색해서 안에 들어있는지 확인하는 메소드이다.
	boolean isInstalledApp(String pappName) {

		// 앱이 설치되면 그만큼의 카운트가 올라갈 rjtdlek.
		for (int i = 0; i < this.appCount; i++) {
			if (this.apps[i].getAppName().equals(pappName)) {
				return true;
			}
		}
		return false;
	}

}
반응형