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是子类重写后的方法的返回值
*/
结论:重载时最重要的是注意,参数列表一定不能相同!此时返回类型是否相就无所谓了。
相关文章推荐
- Java中重载和重写的区别
- Java重写和重载的区别
- java中重载与重写的区别
- java中重载与重写的区别
- java中重写和重载的区别
- JAVA中重写和重载的区别。
- java中重载与重写的区别
- java重载与重写的区别+重写父类equals方法的完美实现
- java中的Overload(重载)和Override(重写)的区别(二)
- Java 深入学习(10) —— 方法重载与方法重写的区别
- [Java]重载,重写以及继承,多态的区别
- java中覆盖、重写与重载的区别
- Java中重载和重写的区别
- 实例分析java中重载与重写的区别
- java中重载与重写的区别
- java中重载与重写的区别
- java重载和重写区别
- java中重载与重写的区别
- JAVA重载和重写的区别
- java学习中重写与重载方法的区别(转自:小鸟的天空)