Which is the final overrider?

Neal Gafter neal at gafter.com
Thu Jan 13 10:55:07 PST 2011

I thought you might like to see this "bug" someone called to my attention
recently.  I don't know if it is a spec issue or a compiler issue.



Hi Neal,

I wonder if you might be interested in considering a possible Java bug?

*package pck;*

abstract class C<T> {
    public abstract Object foo(T x);
    public Integer foo(String x){ return 1; }
    public void bar(T x){

*class D<T> extends C<T> {
    public Object foo(T x) {
        return 2;

*class E extends C<String>{
    public static void main(String args[])
        new E().bar(null);

This code compiles successfully and... what do you think it prints?

But if I reorder foo methods in C<T>, then the behavior changes.

Is it a bug? What is by-design behavior for this code?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20110113/a3256457/attachment.html 

More information about the compiler-dev mailing list