1.
1-1. Weapon 인터페이스에 무기사용 메서드 생성
-> 아래 Gun과 Sword(검) 상속으로 오버라이딩에 무기 종류 출력
1-2. Bomb 인터페이스에 폭탄투여 메서드 생성
-> 아래 Dynamite와 C4 상속으로 오버라이딩에 폭탄 종류 출력
2. Abstract Item 인터페이스 생성 후 Weapon의 무기1, Bomb의 폭탄1 저장하여 무기를 사용할지, 폭탄을 사용할지 선택 할 수 있게 두가지 메서드를 생성해 놓음
3. Person 클래스에서 무기, 변수 생성 후 Create라는 메서드를 통해 Abstract를 입력받아 Atype/Btype을 선택 할 수 있도록 매개변수 AbstractItem ai를 입력받는다. (메서드 속 처리는 AbstracItem의 함수 호출을 받는 변수 생성-> 메인에서 쓰임)
A/Btype 선택을 통해 return 값을 return new Dynamite(); 와 같이 지정해주어 Dynamite속 출력 메서드가 호출되게 해준다.
4. Main 에서 Person 객체 char1생성 후
char1.create(new 타입종류); 선택 후
무기 사용일지 폭탄사용일지 정해준다
main
public class mainClass {
public static void main(String[] args) {
Person char1 = new Person();
char1.create(new Atype());//A/B 클래스 타입에 따라 실행되는게 다름
char1.m_Weapon.drawWeapon();
char1.m_Bomb.drawBomb();
//무기 : Gun
//폭탄 : C4
Person char2 = new Person();
char2.create(new Btype());
char2.m_Bomb.drawBomb();
char2.m_Weapon.drawWeapon();
//폭탄 : Dynamite
//무기 : Sword
}
}
Weapon
public interface Weapon {
public void drawWeapon();
}
Gun
public class Gun implements Weapon {
@Override
public void drawWeapon() {
System.out.println("무기 : Gun");
}
}
Sword
public class Sword implements Weapon {
@Override
public void drawWeapon() {
System.out.println("무기 : Sword");
}
}
Bomb
public interface Bomb {
public void drawBomb();
}
C4
public class C4 implements Bomb {
@Override
public void drawBomb() {
System.out.println("폭탄 : C4");
}
}
Dynamite
public class Dynamite implements Bomb {
@Override
public void drawBomb() {
System.out.println("폭탄 : Dynamite");
}
}
AbstractItem
public interface AbstractItem {
public Weapon createWeapon();
public Bomb createBomb();
}
Atype
public class Atype implements AbstractItem {
@Override
public Weapon createWeapon() {
return new Gun();
}
@Override
public Bomb createBomb() {
return new C4();
}
}
Btype
public class Btype implements AbstractItem {
@Override
public Weapon createWeapon() {
return new Sword();
}
@Override
public Bomb createBomb() {
return new Dynamite();
}
}
Person
public class Person {
public Weapon m_Weapon;
public Bomb m_Bomb;
public void create(AbstractItem ai) {//매개변수에 들어가는 클래스의 타입에 따라 A/B에서 실행될지 결정됨
//메인의 char1객체의 create(매개변수 f)호출부분
m_Weapon = ai.createWeapon();
m_Bomb = ai.createBomb();
}
}
'JAVA > 기초 프로그래밍' 카테고리의 다른 글
쓰레드 예) (0) | 2020.06.15 |
---|---|
TCP// 쓰레드 문자열 전송 기본 (0) | 2020.06.15 |
함수//클래스에서 오버라이딩하여 변수 값 비교하기 (*헷깔림) (0) | 2020.06.09 |
함수//상속//도형면적 반환 (0) | 2020.06.09 |
ArrayList 와 LinkedList (0) | 2020.06.09 |