当前位置: 技术问答>java相关
final不是不能重栽吗?
来源: 互联网 发布时间:2015-11-13
本文导语: package client; import server.ServerNames; class Retrieve extends ServerNames { public final int MAXCONECTIONS=MAXUSERS*10; public static String sendName(String s) { return s; } } package server; public class ServerNames { protected final int MAXUSERS=20; public...
package client;
import server.ServerNames;
class Retrieve extends ServerNames
{
public final int MAXCONECTIONS=MAXUSERS*10;
public static String sendName(String s)
{ return s; }
}
package server;
public class ServerNames
{
protected final int MAXUSERS=20;
public final static String sendName()
{
return "Main Server";
}
}
上 面的为什么能正常运行???
import server.ServerNames;
class Retrieve extends ServerNames
{
public final int MAXCONECTIONS=MAXUSERS*10;
public static String sendName(String s)
{ return s; }
}
package server;
public class ServerNames
{
protected final int MAXUSERS=20;
public final static String sendName()
{
return "Main Server";
}
}
上 面的为什么能正常运行???
|
Retrieve里面的sendName不是overriding而是overloading
|
这是2个不同的函数啊。如果参数一样就不行了。确切来说可能应该说成不能重写好些。
最本质的final就是说明用它声明的是唯一的,是不变的。当然你可以
final int a;然后在构造器里赋值的,但是后面就不能再改变了。
这个的理解,只需要注意在java中声明是声明,赋值是赋值就容易理解了。
比如int a=10;int a就是声明,=10是赋值啦!:)
最本质的final就是说明用它声明的是唯一的,是不变的。当然你可以
final int a;然后在构造器里赋值的,但是后面就不能再改变了。
这个的理解,只需要注意在java中声明是声明,赋值是赋值就容易理解了。
比如int a=10;int a就是声明,=10是赋值啦!:)
|
final method不能被override,而override的method要和父类中的声名一摸一样,你的例子中retrieve里面的sendName和父类中的sendName参数不一样,所以这不是override。
准确的说,retrieve里面的sendName也不是overload,因为父类中的sendName是final,所以retrieve里面没有继承这个method,retrieve自己的sendName也称不上overload了。
准确的说,retrieve里面的sendName也不是overload,因为父类中的sendName是final,所以retrieve里面没有继承这个method,retrieve自己的sendName也称不上overload了。
|
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函数已经被派生类所继承,但不可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();
}
}
|
chenyuan_tongji(codeguru) 描述的很正确