日期:2014-05-20  浏览次数:20731 次

final方法为什么可以被重载
测试代码:
class   A   {
    final   void   a(int   i)   {
        System.out.println( "A.a ");
    }
}

class   B   extends   A   {
    void   a(float   f)   {
        System.out.println( "B.a ");
    }
}

public   class   Test   {
    public   static   void   main(String[]   args)   {
        int   i   =   0;
        float   f   =   0f;
        B   b   =   new   B();
        b.a(i);//   final   not   work
        b.a(f);
        A   a   =   b;
        a.a(i);
    }
}

为什么我可以在子类中重载超类的final方法啊,书上说不可以的,请高人赐教。

------解决方案--------------------
。。。方法重载是发生在同一个类里的吧,与超类发生的是覆盖吧?我也不是很清楚哦
------解决方案--------------------
因为B里面的a方法定义为a(float f),这样与A中的a(int i)方法形成了overload

lz可以试试看吧B里面的a方法也定义为a(int i),这样才是override,并且编译器会告诉lz不能override一个final method