黑马程序员技术交流社区

标题: overloaded和Override区别? [打印本页]

作者: 崔陈喜    时间: 2012-5-16 11:48
标题: overloaded和Override区别?
Overloaded的方法是否可以改变返回值的类型?覆盖的方法的返回值必须和被覆盖的方法的返回一致么 ?
作者: 刘克方    时间: 2012-5-16 11:52
本帖最后由 刘克方 于 2012-5-16 11:58 编辑

Overloaded的方法可以改变返回值的类型。覆盖的方法的返回值可以和被覆盖的方法的返回值不同;
方法的重载主要看方法名和参数类型,以及参数个数;与方法的返回值无关。
作者: Zhang_qian    时间: 2012-5-16 12:27
override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:
    1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
    2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
    3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
    4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
Overload是重载的意思:
        重载的条件:必须在同一个类中;方法名相同;参数列表不同;与返回类型无关。
        重载跟方法的返回值类型无关,所以可以改变返回值类型。而覆盖不行。

作者: 郭振    时间: 2012-5-16 12:31
重载与覆盖的区别
重载:
1.概念上:方法名称相同参数类型或个数不同。
2.范围:在一个类上发生。
覆写:
1.概念上:方法名称参数的类型或个数形同。

2.范围:在继承中发生。子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。

3.静态:静态只能覆盖静态。
作者: 杨永峰    时间: 2012-5-16 12:31
重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同,参数列表不同的方法之间就构成了重载关系。
覆盖 (override):也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。
两者之间的区别:
方法覆盖要求参数列表(参数签名)必须一致,而方法重载要求参数列表必须不一致。
方法覆盖要求返回类型必须和被覆盖的方法的返回一致,方法重载对此没有要求。
方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)
方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。

两者的共同的要求:
都要求方法同名
都可以用于抽象方法和非抽象方法之间





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2