다형성 마술상자는 다형성을 지닌 상자속 객체와 객체를 관리하는 상자 크게 2가지를 생각하며 설계하는 방식이다.
다형성을 지닉 객체는 인터페이스나 추상클래스의 상속을 통한 동일한 접근이 가능해야 하며 상자는 꺼내고 넣기 쉽고 각 객체에 접근하기 쉬워야한다.
다형성 마술상자가 준비되면 우리는 상자속의 객체를 필요할때 꺼내서 객체에 상관없이 동일한 인터페이스로 사용할 수 있다. 가장 흔한 상자속 객체사용법은 이터레이터를 통한 순차접근이며, 고유ID를 부여해서 ID별로 꺼내 쓸 수도 있다.
C++에서는 STL이 생기면서 마술상자 -컨테이너- 를 쉽게 사용할 수 있게 되었으며 자바의 경우도 컨테이너-컬렉션-이 존재해서 쉽게 사용할 수 있다.
다형성 마술상자는 패턴에서도 광범위하게 사용되며, 커맨드 패턴을 예로 들면 사용자 요청이 마술상자내의 객체이고 이 요청을 보관하는것이 컨테이너인 마술상자이다.