Decorator in Java

Why read if you can watch?

Watch Decorator's video tutorial
read full article

Inheritance run amok

public class DecoratorBefore {

static class A { public void doIt() { System.out.print( 'A' ); } }

static class AwithX extends A {
public void doIt() { super.doIt(); doX(); }
private void doX() { System.out.print( 'X' ); }
}

static class AwithY extends A {
public void doIt() { super.doIt(); doY(); }
public void doY() { System.out.print( 'Y' ); }
}

static class AwithZ extends A {
public void doIt() { super.doIt(); doZ(); }
public void doZ() { System.out.print( 'Z' ); }
}

static class AwithXY extends AwithX {
private AwithY obj = new AwithY();
public void doIt() {
super.doIt();
obj.doY();
} }

static class AwithXYZ extends AwithX {
private AwithY obj1 = new AwithY();
private AwithZ obj2 = new AwithZ();
public void doIt() {
super.doIt();
obj1.doY();
obj2.doZ();
} }

public static void main( String[] args ) {
A[] array = { new AwithX(), new AwithXY(), new AwithXYZ() };
for (int i=0; i < array.length; i++) {
array[i].doIt();
System.out.print( " " );
} } }

AX AXY AXYZ