OOP - 계층 상속

devdo·2022년 1월 5일
0

Java

목록 보기
25/56
post-thumbnail

객체지향으로 계층별 상속을 구현해봅니다.

객체 구현(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
profile
배운 것을 기록합니다.

0개의 댓글