Class Part1_InheritancePolymorphism

java.lang.Object
Part1_InheritancePolymorphism

public class Part1_InheritancePolymorphism extends Object
Demonstrates inheritance-based polymorphism resolved via the JVM's per-class virtual method table (vtable).

Disassembled bytecode (javap -c):

Compiled from "Part1_InheritancePolymorphism.java"
public class Part1_InheritancePolymorphism {
  public Part1_InheritancePolymorphism();
    Code:
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return

  public static void makeSpeak(Animal);
    Code:
         0: aload_0
         1: invokevirtual #7                  // Method Animal.speak:()V
         4: return

  public static void main(java.lang.String[]);
    Code:
         0: new           #12                 // class Dog
         3: dup
         4: invokespecial #14                 // Method Dog."<init>":()V
         7: astore_1
         8: new           #15                 // class Cat
        11: dup
        12: invokespecial #17                 // Method Cat."<init>":()V
        15: astore_2
        16: aload_1
        17: invokestatic  #18                 // Method makeSpeak:(LAnimal;)V
        20: aload_2
        21: invokestatic  #18                 // Method makeSpeak:(LAnimal;)V
        24: return
}
  • Constructor Details

    • Part1_InheritancePolymorphism

      public Part1_InheritancePolymorphism()
  • Method Details

    • makeSpeak

      public static void makeSpeak(Animal a)
      Dynamic Dispatch via Class vtable.
      Parameters:
      a - base-typed reference; the concrete override invoked is resolved at runtime via invokevirtual.
    • main

      public static void main(String[] args)