Java中方法的重载和覆盖怎么区分?

如题所述

重载(overload):发生在一个类的内部,而且是针对方法而不是域而言。若方法的签名相同,但参数的个数或者参数的类型不同,则构成了重载。但返回类型不在考虑范围之内,也就是说,如果仅仅是返回类型不同,则构不成重载。 覆盖(override):发生在父类和子类之间,而且是针对实例方法(即非静态方法)而不是域而言。构成覆盖要满足以下条件:1、父类中的static方法不可以被覆盖;2、父类中的final方法不可以被覆盖;3、方法的签名、参数个数以及参数类型都要相同; 对于返回类型要说明两点: 1)如果返回类型是引用类型,则覆盖方法的返回类型可以声明为父类方法声明的返回类型的子类型; 2)如果返回类型是基本类型,则覆盖方法的返回类型必须和父类方法的返回类型相同;来源:( http://blog.sina.com.cn/s/blog_5c4532e50100bqbl.html) - Java中的重载、覆盖和隐藏_村长_新浪博客 对于方法参数的说明:不管父类方法中的参数是否是final的,子类都可以修改这个参数;4、子类方法的访问权限要大于等于父类的访问权限;5、子类方法可以改变某些方法修饰符,如:synchronized、native和strictfp。6、子类方法的throws子句可以和父类方法不同,它列出的每一个异常类型都应该和父类中的异常类型相同或者是父类异常类型的子类; 隐藏(hidden):发生在父类与子类之间,而且只是针对静态成员(静态方法和静态域)。说明:被声明为final的类方法不可以被隐藏。 实例方法被子类的方法覆盖时,实际被调用的方法是在执行时决定的。类方法被子类的方法隐藏时,实际被调用的方法是在编译时决定的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-27
覆盖:当你继承了某类的时候.在子类中若使用与父类同名的方法.父类中的该方法即被覆盖.重载:当你用类实现某接口后.若接口中存在抽象方法.必须在类中重写接口中的所有方法.因为.接口只用于规范化结构 这也是他存在的意义.
第2个回答  2013-10-27
说简单点:重载:就是方法名相同,其他的(返回类型,参数个数,参数类型)不完全相同覆盖:就是将该方法的方法体改写,方法名,返回类型,参数个数,参数类型都不变本回答被网友采纳
第3个回答  2013-10-27
重载:在一个类的内部,如果有一个方法名为test,你重新写一个方法,这个方法的名字也叫test,但是两个方法的参数不同.

也就是说,重载指的是在一个类的内部有两个或多个名字相同但参数不同的方法.

覆盖:如果一个父类有一个方法名为test,在他的子类里也写一个方法名字也是test,两个方法返回类型和参数都相同,但是方法体不同.

也就是说,覆盖指的是不同的类中(父类方法,子类覆盖)有两个或多个返回类型,方法名,参数都相同,但是方法体不同的方法
第4个回答  2013-10-27
重载就是在同一个类中有多个名称相同但参数和返回值不同的方法,例如int Add(int a, int b)double Add(double a, double b)在调用名称为Add的方法时会调用参数最匹配的方法。 覆盖就是子类继承了父类,并将父类中的一个方法重新实现,也就是说将父类的方法用新的代码重新写一遍,这样在调用这个方法的时候运行的就是子类新的代码,而不是父类原来的代码。 重载和覆盖的最主要区别就是:相互重载的各个方法的名称必须相同,参数必须不相同,返回值可以相同也可以不相同;覆盖必须发生在继承中,且方法名称、参数和返回值一定要相同。要注意的是重载也可以发生在继承中,也就是说子类的方法与父类的方法名称相同,但参数不同。
相似回答