Key words: Dependency injection

UML

Not Good Design

Inheritance

Better Design

Composite

Code

class Duck {
  IFlyBehavior fb;
  IQuackBehavior qb;
  IDisplayBehavior db;

  public Duck (IFlyBehavior fb, IQuackBehavior fb,
               IDisplayBehavior db) {
    this.fb = fb;
    this.qb = qb;
    this.db = db;
  }

  public void fly() {
    this.fb.fly()
  }

  public void quack() {
    this.qb.fly()
  }

  public void display() {
    this.db.display()
  }
}

Reference