객체지향으로 계층별 상속을 구현해봅니다.
객체 구현(Elf)
KingElf -> WolfElf -> Elf(가장 부모클래스)
Point
1) 계층별로 상속할 때 super(); 부모클래스 생성자 호출시, 인자 호출 그리고 자신의 인자를 불러오는 방법 : this
2) 오버라이딩(재정의) : 덮어씌울수 있고 +기능확장
을 할 수 있음
Thinking) 오버라이딩시 기능확장
이 더 객체지향프로그래밍에 맞는 것 같음. 재사용성과 관련되어보이기에.
public class mainTest {
public static void main(String[] args) {
Elf elf = new Elf("사란다", 100);
System.out.println("elf: " + elf);
WolfElf wolfElf = new WolfElf("울프란다", 300, 120);
System.out.println("wolfElf: " + wolfElf);
KingElf kingElf = new KingElf("사란다", 500, 220, 50);
System.out.println("kingElf: " + kingElf);
}
}
// 계층별 상속 : KingElf -> WolfElf -> Elf
class Elf{
private String name;
private int hp;
public Elf(String name, int hp) {
this.name = name;
this.hp = hp;
}
@Override
public String toString() {
return "{" +
"name='" + name + '\'' +
", hp=" + hp +
'}';
}
}
class WolfElf extends Elf{
private int mp;
public WolfElf(String name, int hp, int mp) {
super(name, hp); // 부모 생성자 호출
this.mp = mp;
}
// 오버라이딩 재정의
@Override
public String toString() {
return super.toString() + ", mp="+mp;
}
}
class KingElf extends WolfElf {
private int shield;
public KingElf(String name, int hp, int mp, int shield) {
super(name, hp, mp);
this.shield = shield;
}
@Override
public String toString() {
return super.toString() + ", shield="+shield;
}
}
결과)
elf: {name='사란다', hp=100}
wolfElf: {name='울프란다', hp=300}, mp=120
kingElf: {name='사란다', hp=500}, mp=220, shield=50