nerdexam
Oracle

1Z0-803 · Question #266

Given: abstract class A1 { public abstract void m1(); public void m2() { System.out.println("Green"); } } abstract class A2 extends A1 { public abstract void m3(); public void m1() { System.out.printl

The correct answer is A. Yellow. This question tests Java's runtime polymorphism and method overriding, specifically how a method call is resolved when an object is referenced by a superclass type.

Working with Inheritance

Question

Given:

abstract class A1 { public abstract void m1(); public void m2() { System.out.println("Green"); } } abstract class A2 extends A1 { public abstract void m3(); public void m1() { System.out.println("Cyan"); } public void m2() { System.out.println("Blue"); } } public class A3 extends A2 { public void m1() { System.out.println("Yellow"); } public void m2() { System.out.println("Pink"); } public void m3() { System.out.println("Red"); } public static void main(String[] args) { A2 tp = new A3(); tp.m1(); tp.m2(); tp.m3(); } } What is the result?

Options

  • AYellow
  • BCyan
  • CCyan
  • DCompilation Fails

How the community answered

(59 responses)
  • A
    64% (38)
  • B
    12% (7)
  • C
    5% (3)
  • D
    19% (11)

Why each option

This question tests Java's runtime polymorphism and method overriding, specifically how a method call is resolved when an object is referenced by a superclass type.

AYellowCorrect

When `A2 tp = new A3();` is executed, an `A3` object is created and assigned to an `A2` reference. When `tp.m1()` is called, Java's runtime polymorphism ensures that the `m1()` implementation in the actual object's class (`A3`) is invoked, which prints 'Yellow'.

BCyan

The `m1()` method in `A2` (which prints 'Cyan') is overridden by `A3`. Due to runtime polymorphism, the `A3` version takes precedence when called on an `A3` object.

CCyan

The `m1()` method in `A2` (which prints 'Cyan') is overridden by `A3`. Due to runtime polymorphism, the `A3` version takes precedence when called on an `A3` object.

DCompilation Fails

The code is syntactically correct and adheres to Java's rules for inheritance and polymorphism, thus it will compile successfully without any errors.

Concept tested: Java runtime polymorphism and method overriding

Source: https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

Topics

#Inheritance#Polymorphism#Abstract classes#Method overriding

Community Discussion

No community discussion yet for this question.

Full 1Z0-803 Practice