这是2个不同的函数啊。如果参数一样就不行了。确切来说可能应该说成不能重写好些。最本质的final就是说明用它声明的是唯一的,是不变的。当然你可以 final int a;然后在构造器里赋值的,但是后面就不能再改变了。 这个的理解,只需要注意在java中声明是声明,赋值是赋值就容易理解了。 比如int a=10;int a就是声明,=10是赋值啦!:)
overloading是什么? 我认为就是重载呀 overriding 是覆吗?
final method不能被override,而override的method要和父类中的声名一摸一样,你的例子中retrieve里面的sendName和父类中的sendName参数不一样,所以这不是override。准确的说,retrieve里面的sendName也不是overload,因为父类中的sendName是final,所以retrieve里面没有继承这个method,retrieve自己的sendName也称不上overload了。
chenyuan_tongji(codeguru) 描述的很正确
to chenyuan_tongji(codeguru) && fastmask(我心烦) 有异议: 事实上final函数已经被派生类所继承,但不可override. class a{ final int f(){return 1;} } public class Test extends a{ int f(int i){return i;} public int aMethod() { System.out.println(super.f());//1 System.out.println(this.f());//1 System.out.println(f(5));//5 return 1; } public static void main (String args[]) { Test test = new Test(); test.aMethod(); } }
final int a;然后在构造器里赋值的,但是后面就不能再改变了。
这个的理解,只需要注意在java中声明是声明,赋值是赋值就容易理解了。
比如int a=10;int a就是声明,=10是赋值啦!:)
overriding 是覆吗?
有异议:
事实上final函数已经被派生类所继承,但不可override.
class a{
final int f(){return 1;}
}
public class Test extends a{
int f(int i){return i;}
public int aMethod()
{
System.out.println(super.f());//1
System.out.println(this.f());//1
System.out.println(f(5));//5
return 1;
}
public static void main (String args[])
{
Test test = new Test();
test.aMethod();
}
}