// package base; import java.util.*; class Simple extends Item { int weight; public static Simple make(String n,int w) { Simple res = new Simple(); res.name = n; res.weight = w; return res; } public int check() { System.out.println( "Simple object "+name+ " weighs "+weight); return weight; } } public class Main { static public void main(String[] argv) { Container c1= Container.make("Container 1",4); Container c2= Container.make("Container 2",1); Container c3= Container.make("Container 3",1); Simple apple= Simple.make("apple",1); Simple pencil= Simple.make("pencil",1); Simple orange= Simple.make("orange",1); Simple kiwi= Simple.make("kiwi",1); Simple banana= Simple.make("banana",1); c3.addItem(kiwi); // /*\java{c3}*/ weighs 1 c2.addItem(c3); // /*\java{c2}*/ weighs 1 c2.addItem(apple); // /*\java{c2}*/ weighs 2 /*\textbf{overload!}*/ c1.addItem(orange); // /*\java{c1}*/ weighs 1 c1.addItem(pencil); // /*\java{c1}*/ weighs 2 c1.addItem(c2); // /*\java{c1}*/ weighs 4 c1.check(); // /*\java{c1}*/ is ok System.out.println(" done with Container c1 "); c1.addItem(banana); // this overflows /*\java{c1}*/ c1.check(); // so /*\java{check}*/ will complain System.out.println(" done with Container c1 "); } }