重载: 1.同名, 但不同参数个数。
2.同名,但不同参数类型。
3.同名,但不同返回值。
覆盖: 1.必须与父类同名,同参,同返回值。
如果有一者不一样,就不是。
是这样吧??
2.同名,但不同参数类型。
3.同名,但不同返回值。
覆盖: 1.必须与父类同名,同参,同返回值。
如果有一者不一样,就不是。
是这样吧??
解决方案 »
- 怎样从内部类中,得到外部类对象的引用
- JAVA怎么入门快些,有什么好书啊。
- myeclipse 6.0 Struts1.0 + Spring2.0+hibernate3.1整合问题
- 有关java中16进制数的问题,请大家赐教
- Java小系统 希望可以得到您的帮助
- 用Jad反编译后的java代码出现很多无法编译的错误,怎么解决?
- 请教:联通手机短信Socket编程的问题
- 请高手解决一个问题!
- 请问谁有JAVA编码规则?能否给小弟一份?先谢了!
- 请问个各位大侠,抽象类有什么作用是什么??请举一个例子!谢谢!
- PrintWriter和FileWriter在文件写入时有什么区别
- 菜鸟求助,Java中传值还是传引用?
如1所以,overload的標識是參數部分
覆盖是类层次结构中的一种关系,比如父类有某个方法,子类中同样实现一个同名并且签名相同的方法,这种情况我们称之为overriding。注意,这里要求签名相同。但是返回值可以有些许不同,这里的不同指的是子类中重写的方法可以返回父类中返回类型的子类型,说起来很绕,简单的举个例子,如果父类中方法的返回类型是Number类型,那么子类中的这个覆盖方法的返回类型可以是Number类型,也可以是其子类型,比如Integer,Double等等。
这样两个概念的区别已经很明了了,而且也应该知道,覆盖是实现多态的关键技术。
两个概念还有个重要的区别是,重载是静态绑定的,因为编译的时候我就可以根据签名确定具体要调用的方法,而覆盖是运行时绑定的,因为运行的时候我才能根据运行时类型信息,确定具体要调用哪个类中定义的覆盖方法。
最后,引经据典
《The Java Programming Language》中:
* Overloading a method is what you have already learned: providing more than one method with the same name but with different signatures to distinguish them.
* Overriding a method means replacing the superclass's implementation of a method with one of your own. The signatures must be identicalbut the return type can vary in a particular way, as discussed below.
Java是一種語言,不像微機原理,算法分析,數據結構等基礎理論,你應該做到如10樓所說
{
/*public void f() //这2个是错误的,因为返回值不属于重载方法
{
}
public int f()
{
return 1;
}*/
/*public void f(A a)//这2个还是错的,因为泛型的擦除,导致这2个方法成为
{ //f(Object a) f(Object b)}
public void f(B b)
{}*/
public void f(A a) //看这个!
{}
public int f(B b)
{
return 1;
}
public static void main(String[] args)
{}
}