Pet p = new Cat(Color.BLACK);

System.out.println(p.getName());   // line 1 (Pet)
System.out.println(p.getBreed());  // line 2 (error)
System.out.println(p.getColor());  // line 3 (error)
System.out.println(p.toString());  // line 4 (Pet)
System.out.println(p);             // line 5 (same as line 4)

The first rule of polymorphism is: The variable/reference type determines what methods can be run.

The variable/reference type of p is Pet.

line 2 and line 3 do not compile because getBreed and getColor are not in Pet. It doesn’t matter that getColor is in Cat. The method cannot be run.

line 1 runs getName from Pet. line 4 runs toString from Pet.

line 5 is the same as line 4. Printing an object automatically runs the object’s toString method.

Back to Inheritance and polymorphism


Comment on Inheritance & polymorphism