JAVA 기초

JAVA 11-2

Vanillwa 2023. 8. 25. 21:38

다형성

 

Computer 클래스 (부모)

package ex4_computer;

public class Computer {
	//다형성
	//하나의 타입으로 여러가지 객체를 사용할 수 있는 것
	//클래스의 타입 변환이 존재하는 이유 : 다형성의 구현
	//객체가 특정 클래스의 변수가 되며 하나의 부품처럼 사용될 수 있음
	//부품을 교체해야 할 경우, 다형성을 통해 코드의 수정을 최소화할 수 있음
	
	public void powerOn() {
		System.out.println("컴퓨터 전원 켜기");
	}
	
	public void powerOff() {
		System.out.println("컴퓨터 전원 끄기");
	}
}

 

WindowsCom 클래스 (자식1)

package ex4_computer;

public class WindowsCom extends Computer {
	@Override
	public void powerOn() {
		super.powerOn();
		System.out.println("윈도우 부팅중");
	}
}

 

MacCom 클래스 (자식2)

package ex4_computer;

public class MacCom extends Computer {
	@Override
	public void powerOn() {
		super.powerOn();
		System.out.println("맥 부팅중");
	}
}
=

 

ComputerRoom 클래스

package ex4_computer;

public class ComputerRoom {
	Computer com1; //객체 선언만 함 -> 메모리를 점유하지 않음
	Computer com2;
	
	public void allPowerOn() {
		com1.powerOn();
		com2.powerOn();
	}
	
	public void allPowerOff() {
		com1.powerOff();
		com2.powerOff();
	}
}

 

Main 클래스

package ex4_computer;

public class ComMain {
	public static void main(String[] args) {
		ComputerRoom cr = new ComputerRoom();
		
		cr.com1 = new MacCom();
		cr.com2 = new WindowsCom();
		
		cr.allPowerOn();
		cr.allPowerOff();
	}
}

실행 결과


 

Abstract (추상)

 

AbsParent 클래스 (부모)

package ex5_abstarct;

//추상 메서드가 한개 이상 정의되어 있는 클래스는 추상클래스
//추상 클래스 또한 abstract 키워드를 통해 명시해줘야 한다.
public abstract class AbsParent { 
	int value = 100;
	
	public int getValue() {
		return value;
	}//일반적인 메서드
	
	//추상 메서드(abstract method)
	//다형성을 위해 메서드의 선언을 통일하지만
	//실제로 구현할 내용은 자식클래스마다 달라야 할 때
	//부모 클래스의 메서드는 비워두고 자식클래스에서 오버라이딩 하여 구현
	//접근제한 abstract 반환형 메서드명(파라미터);
	public abstract void setValue(int n);
}

 

AbsChild 클래스 (자식)

package ex5_abstarct;

public class AbsChild extends AbsParent{
	
	//추상 클래스를 상속받았기 때문에 추상 메서드를 강제적으로 오버라이딩 해야한다.
	@Override
	public void setValue(int n) {
		System.out.println("추상 메서드 정의");
	}
}

 

Main 클래스

package ex5_abstarct;

public class AbsMain {
	public static void main(String[] args) {
		//추상 클래스는 객체로 만들 수 없다.
		//AbsParent ap = new AbsParent();
		
		AbsChild ac = new AbsChild();
		ac.setValue(20);
		System.out.println(ac.getValue()); //추상 클래스 내의 변수 출력
	}
}

실행 결과

'JAVA 기초' 카테고리의 다른 글

JAVA 12-1  (0) 2023.08.28
JAVA 11-3  (0) 2023.08.25
JAVA 11-1  (0) 2023.08.25
JAVA 10-HW  (0) 2023.08.24
JAVA 10-2  (0) 2023.08.24