java中⽅法的重载与重写的区别
重载和重写,这是两个新概念,是两个令我们容易混淆的概念。
⽅法重载(overloading method) 是在⼀个类⾥⾯,⽅法名字相同,⽽参数不同。返回类型呢?可以相同也可以不同。
⽅法重写(overiding method) ⼦类不想原封不动地继承⽗类的⽅法,⽽是想作⼀定的修改,这就需要采⽤⽅法的重写。⽅法重写⼜称⽅法覆盖。
⽅法重载是让类以统⼀的⽅式处理不同类型数据的⼀种⼿段。Java的⽅法重载,就是在类中可以创建多个⽅法,它们具有相同的名字,但具有不同的参数和不同的定义。调⽤⽅法时通过传递给它们的不同个数和类型的参数来决定具体使⽤哪个⽅法, 这就是多态性。
⽅法重写:在Java中,⼦类可继承⽗类中的⽅法,⽽不需要重新编写相同的⽅法。但有时⼦类并不想原封不动地继承⽗类的⽅法,⽽是想作⼀定的修改,这就需要采⽤⽅法的重写。⽅法重写⼜称⽅法覆盖。 若⼦类中的⽅法与⽗类中的某⼀⽅法具有相同的⽅法名、返回类型和参数表,则新⽅法将覆盖原有的⽅法。 如需⽗类中原有的⽅法,可使⽤super关键字,该关键字引⽤了当前类的⽗类
重写⽅法的规则:
参数列表必须完全与被重写的⽅法的相同,否则不能称其为重写⽽是重载.
返回的类型必须⼀直与被重写的⽅法的返回类型相同,否则不能称其为重写⽽是重载.
访问修饰符的限制⼀定要⼤于被重写⽅法的访问修饰符(public>protected>default>private)
重写⽅法⼀定不能抛出新的检查异常或者⽐被重写⽅法申明更加宽泛的检查型异常.例如,
⽗类的⼀个⽅法申明了⼀个检查异常IOException,在重写这个⽅法是就不能抛出Exception,只能抛出IOException的⼦类异常,可以抛出⾮检查异常.
重载的规则:
必须具有不同的参数列表;
可以有不同的返回类型,只要参数列表不同就可以了;
可以有不同的访问修饰符;
可以抛出不同的异常;
注意,Java的⽅法重载要求同名的⽅法必须有不同的参数表,仅有返回类型不同是不⾜以区分两个重载的⽅法。重写⽅法只能存在于具有继承关系中,重写⽅法只能重写⽗类⾮私有的⽅法。
下⾯分别举⼀个例⼦来说明⽅法重载:
public class TestOverLoad{
public static void main(String[] args) {
Test test = new Test();
test.print(null);
java重写和重载的区别}
}
class Test{
public void print(String some){
System.out.println("String version print");
}
public void print(Object some){
System.out.println("Object version print");
}
}
该程序输出的结果是String version print。这个题⽬明显是考察⽅法重载的,重载使得java的类可以有具有多个相同⽅法名的⽅法。编译器可以通过⽅法的参数的类型和个数来区分他们。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论