지난 포스트에서 상속에 대해 공부 후 이번 포스트에서는 예제를 활용하여 연습 하려고한다.

위 이미지와 같은 형태로 무기이름(String)과 데미지(Int)를 입력하면 해당무기로 공격하고 공격받은 데미지를 출력한 후 해당 무기에 공격받는 사운드를 출력하는 예제이다.
Gun,OneHandSword,magic클래스는Attackable클래스를 상속 받아 안에 있는
attack()메소드를 overiding 하여 구현 하였다.
public static void main(String[] args){
Character c1 = new Character();
Attackable gun = new Gun("AK-47", 14);
Attackable sword = new OneHandSword("한손검",10);
Attackable magic = new Magic("에너지볼트", 47);
//총 장착
c1.setWeapon(gun);
c1.attack();
System.out.println();
System.out.println("=======무기변환=======");
System.out.println();
//한손검 장착
c1.setWeapon(sword);
c1.attack();
System.out.println();
System.out.println("=======무기변환=======");
System.out.println();
c1.setWeapon(magic);
c1.attack();
public class Character {
Attackable weapon;
public static character(Attackable weapon) {
this.weapon = weapon;
}
public static character(){
}
public void attack(){
weapon.attack();
}
public Attackable getWeapon() {
return weapon;
}
public void setWeapon(Attackable weapon) {
this.weapon = weapon;
}
}
// 공격 기능 구현
public class Attackable {
String name; //무기 이름
int damage; //무기의 데미지
//생성자 만들기
Attackable(String name, int damage){
this.name = name;
this.damage = damage;
}
//공격 메소드
//공격한 무기와 공격시 데미지를 출력
public void attack(){
//해당 무기 클래스를 만든다음 상속해서 처리하기
System.out.println(name + "(으)로 공격합니다.");
System.out.println(damage + "의 데미지를 받았습니다.");
}
}
//Attackable 클래스를 상속받는 gun클래스 정의
public class Gun extends Attackable{
Gun(String name, int dagame){
super(name, dagame);
}
@Override
public void attack() {
super.attack();
System.out.println("빵! 크르르 칵칵!");
}
}
public class OneHandSword extends Attackable{
OneHandSword(String name, int damage){
super(name, damage);
}
@Override
public void attack() {
// TODO Auto-generated method stub
super.attack();
System.err.println("서걱서걱서걱서걱!!");
}
}
public class Magic extends Attackable {
Magic(String name, int damage){
super(name, damage);
}
@Override
public void attack(){
//부모클래스의 attack 메소드를 상속
super.attack();
//자식클래스에서 사용할 기능 구현
System.out.println("에너지볼트!!");
}
}
