상속을 통해 하위클래스의 캡슐화를 깨트리기 때문이다.
예를 들어, HashTable을 통해 Property에 접근이 가능하게 되었다.
Properties 타입은 본래 문자열 key, value만 넣을 수 있다.
그런데 상위 클래스인 HashTable을 통해서 문자열 이외의 타입을 넣을 수 있다는 것이다. 그래서 이후에 Properties의 load, store와 같은 Properties API도 사용할 수 없게 되었다.
또한 HashTable의 모든 메서드를 물려받는 것이기 때문에 메서드 사용에 있어서 사용자는 매우 혼란스럽게 되었다.
Properties p
...
p.getProPerty(key) //Properties의 동작
p.get(Key) // Hashtable로부터 물려받은 메서드
Properties 타입의 인스턴스 p가 있을 때 p.getProPerty(key) 는 p.get(key)는 결과가 다를 수 있다. getProperty(key)는 Properties의 기본동작인데 반해, get(key)는 HashTable의 메서드이기 때문이다.