<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">class DynamicDispatch {
  public static void main(String[] args) {
    A a = new A();
    B b = new B();
    C c = new C();
    D d = new D();
  
    A[] array = {a, b, c, d};
    for (A element : array) {
      System.out.println("x():");
      element.x();
      System.out.println("\ny():");
      element.y();
      System.out.println("\nz():");
      element.z();
      System.out.println("\n=====\n");
    }
  }
}

class A {
  public void x() {
    System.out.println("-&gt; A x()");
    z();
  }
  
  public void y() {
    System.out.println("-&gt; A y()");
    this.z();
  }
  
  public void z() {
    System.out.println("-&gt; A z()");
  }
}

class B extends A {
  public void y() {
    System.out.println("-&gt; B y()");
    x();
  }
  
  public void z() {
    System.out.println("-&gt; B z()");
  }
}

class C extends B {
  public void x() {
    System.out.println("-&gt; C x()");
    z();
  }
}

class D extends A {
  public void x() {
    System.out.println("-&gt; D x()");
    super.x();
  }
  
  public void z() {
    System.out.println("-&gt; D z()");
  }
}</pre></body></html>