本帖最后由 ccywhut 于 2013-6-5 20:12 编辑
overload重载:在同一访问区里的同名函数,它们的参数个数、参数类型或参数顺序不同(即参数列不同),程序根据不同的参数列来确定具体调用那个函数,重载不关心函数返回值类型,与返回值无关。
override是覆盖:子类重新定义的函数,它的函数名、返回值、参数列(参数个数、参数类型或参数顺序)必须与父类要覆盖的函数严格一致,子类在调用这个同名函数时,会调用子类的覆盖版本,不再调用父类被覆盖的函数。
C语言中就有重载,它只是一种语法规则,与多态没直接关系,主要是系统在编译时能确定调用重载函数的哪个版本,即是编译多态。
覆盖是多态的体现,面向对象核心就是多态。我们编程最多的就是父类、子类,继承、实现的关系,很多情况就是子类去覆盖(重写)父类方法。
下面是个小例子:
public class Test3
{
public static void main(String[] args) {}
public void f1(int i){}
在其后加上下面方法中的任意一个。
1.编译无法通过,参数类型相同,只是把i换成j而已,还有就是改变了返回值类型,但重载不关心函数返回值类型,所以编译器认为是覆盖了上面的方法,而在同一个类JAVA是不允许的。
public int f1(int z){} //1编译不通过,覆盖
public int f1(int i,int j){} //2重载
public void f1(long i){} //3重载
}
|