查看: 1430|回复: 0

[Java学习] 简述重写和重载的区别

发表于 2018-2-2 08:00:02

重写:
1.发生在子父类之间
2.子类声明了和父类完全相同的方法,同方法名,同参数列表,同返回值
3.访问权限不能被缩小
4.异常不能被扩大
重载:
1.在同一个类中定义了多个同名的方法
2.参数列表不同(参数个数不同,参数类型不同,参数顺序不同(基于参数类型不同))

和返回类型无关。

请看关于父子类的例子:

  1. class father
  2. {
  3. public void move(){
  4. System.out.println("走");
  5. }
  6. }
  7. class child extends father //child类继承father类
  8. {
  9. public void move(){ //方法重写要求参数签名必须一致,
  10. System.out.println("跑") //方法重写,返回类型也必须相同,输出不同而已
  11. }
  12. public void move(String move) //方法重载,重载要求!参数!签名必须不一致,
  13. {
  14. System.out.println(move); //重载对返回类型不做限制。
  15. }
  16. }
复制代码

什么是重写?

  1. class A{
  2. public void overWrite()
  3. {
  4. System.out.print("A")
  5. }
  6. }
  7. public class B extends A
  8. {
  9. public void overWrite()
  10. {
  11. System.out.print("B")//输出和父类不一样
  12. }
  13. public static void main(String[] args)//主方法
  14. {
  15. A a=new B(); //重写父类的方法
  16. a.overWrite();//重写父类的属性.
  17. }
  18. }
复制代码

从上面可以看出:
重载和重写的区别
方法重写要求参数签名必须一致,而重载要求参数签名必须不一致。
方法重写要求返回类型必须一致,而重载对此不做限制。
方法重写只能用于子类重写父类的方法,必须有两个类子类和父类,重载可用于同一个类的所有方法。

给个小测试~
给定java代码如下所示,在A处新增下列( )方法,是对cal方法的
重载(选择两项)
public class Test{
public void cal(int x, int y, int z){
}
}
A. public int cal(int x,int y,float z){return 0;}
B. public int cal(int x,int y,int z){return 0;}
C. public void cal(int x,int z){}
D. public viod cal(int z,int y,int x){}

正确答案:AC
D. public viod cal(int z,int y,int x){}///重载要求参数签名必须不一致 ,哪怕换了位置也不行
B. public int cal(int x,int y,int z){return 0;}//重载要求参数签名必须不一致



回复

使用道具 举报