重载与覆写(重写)
一、重载
- 重载的方法是在同一个类中
- 一般需要对于要实现同一个功能,但是传入的参数不同时需要用到重载
class StuManage {
public int getScore(){
return 3;
}
public int getScore(int i){
return i;
}
//错误示例:
/*public long getScore(int i){
return i;
}*/
/*private int getScore(int i){
return i;
}*/
/*public static int getScore(int i){
return i;
}*/
/*public final int getScore(int i){
return i;
}*/
public int getScore(Integer i){
return i;
}
//可变参数,i实质上是数组int[]
public int getScore(int ... i){
return 3;
}
重载满足的条件
-
方法名相同,参数类型或者个数不同
-
方法的返回值类型或者访问权限符不同不能称之为重载,否则会报错
二、重写
- 重写的方法位于不同类中
- 是实现多态的一个条件
- 是子类对父类的同名方法进行重新定义,实现新的功能
- 一般重写时,会在重写的方法前加上注释
@Override
便于检查重写的方法是否正确
//父类
class Parent {
Number getScore(int a) {
return new Integer(7);
}
}
//子类
class Son extends Parent {
@Override //所有的覆写方法需注明
Number getScore(int b){
return new Integer(8);
}
}
public class RunSon{
public static void main(String args[]){
Son s = new Son();
System.out.println(s.getScore());
}
}
重写需要满足的条件
-
重写的方法要求方法名称,参数类型以及个数完全相同
-
重写要求访问权限不能小于(需要大于等于)父类中的方法权限
-
重写要求返回值类型必须与原方法相同或者能够向上转型成为父类的返回类型
-
重写只能针对非静态、非final、非构造方法。也就是说想要被重写的方法不能设置为静态,
final