5장 상속(추상 클래스와 인터페이스)
추상 클래스
추상 메소드 - 선언은 했으나 내용이 정의되지 않은 메소드, 추상 메소드를 갖는 클래스는 무조건 추상 클래스가 되어야 함추상 클래스 - 바로 객체 생성할 수 없고, 상속을 해서 추상 메소드를 정의한 후에 객체 생성이 가능하도록 하는 클래스, 추상 메소드가 없는 경우에는 상속만 하면 객체 생성이 가능해짐
abstract class AbsClass {
public AbsClass () { }
public abstract void abs_method(); // 추상 메소드
}
abstract class AbsClass { // 추상 메소드는 없지만 추상 클래스로 선언됨
public AbsClass () { }
public void abs_method();
}
http://www.tutorialspoint.com/java/java_abstraction.htm
인터페이스
- 모든 메소드가 추상 메소드임- 상속 관계가 없는 객체에게 특정 동작(메소드)을 갖추도록 요구할 때 사용함.
예를 들어 호수에 물고기랑 플랑크톤, 다이버들 모두 '움직임'이란 메소드를 가질 수 있는데, 이들이 상속 관계라고 보기는 어렵다. 그런데, 공통 메소드를 갖는 객체들에 대해 처리하고 싶을때가 생긴다.
public interface AbsInterface {
public void abs_method();
}
인터페이스는 상속이 아니라 구현(implements)을 통해 사용
class AbsImpl implements AbsInterface {
public void abs_method() {}
}
한개 이상의 인터페이스를 상속하여 다른 인터페이스를 만들 수 있음
http://www.tutorialspoint.com/java/java_interfaces.htm
실습
다음 수업 첫 번째 시간 실습 내용(집에서가서 고민해보기)
2. 인터페이스 상속하기
Movable과 Drawable을 상속한 MoveDrawable interface를 만들고, 이를 이용하여 Lake_If에 addMoveDrawable(MoveDrawable md) 메소드를 추가하여 다음과 같이 main()이 가능하도록 해보자. 물론 MyFish도 약간 고쳐야 함.
Lake_If lake = new Lake_If(80, 20);
MyFish f = new MyFish("FIsh", "<#--<", 1, 1);
lake.addMoveDrawable(f);
lake.addDrawable(new MyRock("Rock", "(##)", 10, 10));
3. 메소드를 좀 더 심플하게!
Lake_If에 addObject(MyObject)라는 메소드를 추가한다. 그리고 인자로 받은 객체가 Moveable 인터페이스를 구현하고 있는지, Drawable 인터페이스를 구현하고 있는지 확인하여 해당 배열에 넣는 addDrawable()과 addMovable()을 적절히 호출한다.
힌트: instanceof 연산자 사용.