2016년 4월 3일 일요일

Java 4/4 5장 상속

5장 상속

객체간의 관계

A has-a B: 객체 A가 객체 B를 가지고 있음, A가 B로 구성됨. A에 B가 포함됨. 자동차는 바퀴4개와 엔진을 가지고 있음.
A is-a B: 객체 A는 객체 B이다. 학생은 사람이다. B가 더 일반화된 객체임.

A has-a B

- composition: 자동차는 엔진을 가지고 있음. 엔진이 없으면 자동차는 의미가 없음.
- aggregation: 호수에 물고기가 있음. 물고기가 없어져도 호수는 존재함.

보통 B는 클래스 A의 필드(속성, 멤버 변수)로 표현됨.

Car has-a Engine

class Engine {
}

class Car {
    private Engine engine;
    Car() {
        engine = new Engine();
    }
    Car(Engine e) {
        engine = e;
    }
}

A is-a B

A는 B의 한정(전문, specialized)된 객체, B는 A의 일반(generalized)화된 객체
Java와 같은 객체지향 언어에서는 상속(inheritance)를 통해 표현됨.

Student is a Person

class Person {
    private String id_card;
}

class Student extends Person {
    private String student_id_card;
}

상속 받은 클래스를 서브클래스(subclass, 자식), 상속된 클래스를 슈퍼클래스(superclass, 부모)라고 함.
Person이 슈퍼클래스, Student가 서브클래스


실습 

호수의 물고기 시뮬레이션
Lake has-a Fish

1. Lake의 Fish를 10마리로 늘려보자.
Fish를 배열로 만들 것!

2. 10마리 Fish 중 홀수 인덱스는 원래 대로 랜덤하게 움직이게 하고, 짝수 인덱스 Fish는 x, y를 무조건 1씩 증가하도록 움직이게 해보자.
새로운 Fish2 클래스를 만들어도 되고, Fish 클래스에 새로운 움직임 메소드를 만들어도 됨.