abstract class Seasoning { public abstract String taste(); } class Salt extends Seasoning { public String taste() { return "Salty"; } } class Pepper extends Seasoning { public String taste() { return "Hot"; } } abstract class Edible { protected Seasoning _seasoning = new Salt(); public void setSeasoning(Seasoning s) { _seasoning = s; } public void show() { System.out.println(_seasoning.taste() + " " + this); } } class PopCorn extends Edible { public String toString() { return "pop corn"; } } public class App { public static void main(String args[]) { Edible e = new PopCorn(); e.setSeasoning(new Salt()); e.show(); e.setSeasoning(new Pepper()); e.show(); } }