Machine-translated by Google. Questions are authored in English.
Top

Discussion

Sample26 is run - what will be the output?

public class Sample26 extends Thread
{
    private final String label = "report";
    private int calls;

    public void run(String prefix)
    {
        calls++;
        System.out.println(prefix + label + calls);
    }

    public static void main(String[] args) throws InterruptedException
    {
        Sample26 task = new Sample26();
        task.start();
        task.join();
        System.out.println("finished " + task.calls);
    }
}

  • A.finished 0, because start() cannot be called on a subclass of Thread
  • B.finished 0, because the inherited no-argument run() was invoked and does nothing
  • C.report1 then finished 1
  • D.Compilation fails, because run() must take no arguments

Answer: B

Adding a parameter creates an overload, not an override, so Thread's own no-argument run() is what start() invokes. That inherited method has no Runnable to delegate to and does nothing, so the counter is never incremented and only main's line appears. @Override on the method would have turned the mistake into a compile error.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.