상속을 extends답게

상속은 inheritance가 아니라 확장(extend)

public class Car {

}

public class Sonata extends Car {

}
  • 상속을 한다는 것은 타입을 세분화(하위 타입 생성)시키겠다는 것
  • 하위클래스는 상위타입의 한 종류이다 : is a kind of

하위클래스와 상위클래스의 관계

부분집합

  • 상-하위 관계를 설계해두면? 중복 코드를 줄이면서도, 다형성을 적극 활용할 수 있음

추상클래스(abstract class)

public abstract class Car implements Movable {
    
    public abstract void method();
}

public class Sonata extends Car {

    @Override
    public void method() {
              
    }
}
  • 자바에서는 상위클래스에서 method를 구현하지않고, 상위클래스 extends하는 하위클래스에서 method를 각각 구현하도록 하는 abstract class도 있다.
  • interface와 abstract class은 언제 사용할까에 대해서 나의 의견은 다음 포스팅에 써볼 생각

일관성 있게 extends 하자! 리스코프 치환 원칙

Car car = new Sonata();
car.run();
  • 상위 타입 변수에 하위 타입 인스턴스의 주소값이 저장해도 되도록 설계하자, 일관성 있게 extends 하자
  • 다형성에 의해 run()은 Sonata에서 오버라이딩된 메소드가 동작할 것
  • 상속을 상속답게 하자
    • 비행기가 활주로에서 달려서 Car의 run()과 같은 메소드가 필요하다, 그렇다고해서 Car의 run()을 사용하기위해 Car를 상속받지말자

참고