本帖最后由 Zero霖 于 2014-2-27 13:57 编辑
覆盖和重载都是多态的体现形式。
1.重载是功能多态性的体现,方法重载指的是一个类中多个方法具有相同的名字,但是这些方法的参数必须不相同,简单的说,比如我在一个类中定义一个计算int型数据的除法方法,再定义一个计算double型数据的除法方法,将这两个方法都命名为division,一个是 int division(int x,int y),另一个是double division(double x,double y)(跟返回值没关系,返回值可以相同,这里是根据需要来决定返回值的),这就导致在对象调用方法时,根据你输入的不同参数类型来调用division方法。
2.方法覆盖,也称方法重写,指的是子类中定义一个方法,且这个方法的名字、返回类型、参数个数和参数类型与从父类那继承的方法完全相同时,隐藏了从父类那继承的方法。比如:类A中有一个方法叫void f(int x,double y),而类B继承了类A,也就继承了类A中的方法,当类B重写了从类A那继承过来的void f(int x,double y)方法以得到自身需要的结果,类B创建的对象调用void f(int x,double y)方法时将使用类B重写过的,而不是类A里面的该方法。当然,也可以根据需要即使重写了方法,也可以调用原来继承过来的未重写之前的方法。P.S.有很多方法覆盖都发生在继承了abstract类的类中,因为abstract类定义了一个abstract方法,该方法没有具体实现什么,而需要子类去实现,这就导致了继承了abstract类的子类必须去实现这个abstract方法,也就是说,继承了abstract类的子类必须实现这个功能,至于怎么实现这个功能和得到的结果是什么,abstract类就不用去管了。
|