测试代码:
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方法啊,书上说不可以的,请高人赐教。

解决方案 »

  1.   

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

  2.   

    明白了,是书里将override翻译成了重载误导我了,谢了
      

  3.   

    同一类里2个方法名称相同参数不同才叫重载 而且final的方法根本不能被继承 不能继承还提什么覆盖和重载?
      

  4.   

    不同意楼上的意见,final方法是可以被继承的,要不然b.a(i)语句编译时会报错的
      

  5.   

    是啊
    final 无法重载和继承阿
      

  6.   

    final可以重载(overload),不能覆盖(override)Bill