您的位置:首页 > 编程语言 > Java开发

Java中的重载和重写区别

2017-09-10 20:31 330 查看



1.重载(overload)
  java中的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同参数列表(不同表现在参数个数和参数类型上)。也可以在子类中重载父类方法。需要注意的是,不能仅仅通过返回值不同来实现重载(注意“仅仅”两字)。

2.重写(override)

  若子类中的某一方法和父类中的某一方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖父类中的方法。此时如果new出来的是子类对象,不管引用是父类还是子类,调用该方法时执行的都是覆盖后的方法。另外,可以通过添加@Override注解来检测重写,若未能正确重写父类方法,则编译器会报错。

示例代码:

[java] view
plain copy

class Super{
public void a(){

}

public void a(int a,int b){ //一般的重载

}

public int b(){
return 0;
}

        /*public long b(){      //编译错误,不能仅仅通过返回类型不同来进行重载
return 1;
}*/

public long b(int a){   //编译通过,因为参数列表不同,满足重载条件,此时返回类型可任取
return 1;
}

}

class Child extends Super{
public int a(int a,int b,int c){  //子类通过不同的参数个数重载父类方法
return 2;
}

public long b(String a){  //子类通过不同的参数类型重载父类方法
return 2;
}

@Override
public int b(){   //子类重写父类方法
return 3;
}

public int superb(){ //显示调用父类中被覆盖的方法
return super.b();
}

/*@Override
public int b(int a, int b){  //编译不通过,因为没有按照要求来重写父类方法,此处其实只是在进行重载
return 4;
}*/

}

public class Test {
public static void main(String[] args) {
Super sup = new Super();
Super sup2 = new Child();
Child child = new Child();
System.out.println(sup.b());  //创建的是父类,调用的仍然是父类的方法
System.out.println(sup2.b()); //父类引用子类,调用的是子类覆盖后的方法(这就是List对象
      //能够正确调用ArrayList类重写后的方法的原理)

System.out.println(child.b()); //创建的是子类,调用的是子类覆盖后的方法
System.out.println(child.superb()); //在子类中显式的调用被覆盖的父类方法
}

}

/* 输出: 0 3 3 0
其中0是父类方法的返回值,3是子类重写后的方法的返回值

*/  

结论:重载时最重要的是注意,参数列表一定不能相同!此时返回类型是否相就无所谓了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: