Lets say we have a program which contains such classes:
public interface AbstractItem {
}
public SharpItem implements AbstractItem {
}
public BluntItem imple
public interface AbstractItem
{
}
public class SharpItem implements AbstractItem
{
}
public class BluntItem implements AbstractItem
{
}
public interface AbstractToolbox
{
public List getItems();
}
public class ExpensiveToolbox implements AbstractToolbox
{
private List items = new ArrayList();
public List getItems() { return this.items; }
}
public class CheapToolbox implements AbstractToolbox
{
private List items = new ArrayList();
public List getItems() { return this.items; }
}
public void doImportantStuff(AbstractToolbox> toolbox)
{
List extends AbstractItem> items = toolbox.getItems();
for(AbstractItem item : items)
... ;
}