다형성
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()); //추상 클래스 내의 변수 출력
}
}