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

Discussion

Which line rests on a mistaken assumption?

public class Sample69
{
    static class Base { static String tag = "base"; }
    static class Sub extends Base { static String tag = "sub"; }

    public static void main(String[] args)
    {
        Base b = new Sub();
        assert b.tag.equals("sub") : b.tag;
        System.out.println(b.tag);
    }
}

  • A.assert b.tag.equals("sub") : b.tag;
  • B.Base b = new Sub();
  • C.static class Sub extends Base { static String tag = "sub"; }
  • D.Nothing here is wrong.

Answer: A

Fields are not polymorphic. Accessing tag through a variable declared Base resolves to Base.tag at compile time, so the value is base regardless of the object's runtime type, and the assertion fails. Hiding a field is legal but rarely what the author wanted.

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

Post your comment

Please log in or register to post a comment.