리스코프 치환 원칙(Liskov substitution principle)
“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.”
부모 타입에 자식 객체를 담아주든, 자식 타입에 자식 객체를 담아주든 동일하게 동작해야한다는 의미
List<Integer> list = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
두가지는 동일하게 사용이 가능하다
부모한테 없는거 자식이 type casting해서 쓰는 경우는 이 원칙에서 제외해서 생각해야한다
Override 된게 있다고 했을 때 부모 타입에서 쓰든 자식 타입에서 쓰든 다른 모든 것들이 동일하게 사용되어야 한다는 의미