class Cleanser { private String s = "Cleanser"; public void append(String a) { s += a; } public void dilute() { append(" dilute()"); } public void apply() { append(" apply()"); } public void scrub() { append(" scrub()"); } public String toString() { return s; } public static void main(String[] args) { Cleanser x = new Cleanser(); x.dilute(); x.apply(); x.scrub(); System.out.println(x); } } class Detergent extends Cleanser { // Change a method: public void scrub() { append(" Detergent.scrub()"); super.scrub(); // Call base-class version } // Add methods to the interface: public void foam() { append(" foam()"); } // Test the new class: public static void main(String[] args) { Detergent x = new Detergent(); x.dilute(); x.apply(); x.scrub(); x.foam(); System.out.println(x); System.out.println("Testing base class:"); Cleanser.main(args); } } class Sterilizer extends Detergent { public void scrub() { append(" Sterilizer.scrub()"); super.scrub(); // calling base class } public void sterilize() { append(" sterilize()"); } public static void main(String[] args) { Sterilizer x = new Sterilizer(); x.dilute(); x.apply(); x.scrub(); x.foam(); x.sterilize(); System.out.println(x); System.out.println("Testing base class:"); Detergent.main(args); } }