重载(overload)
-
在同一个类中,方法名相同,参数列表不同(参数个数,参数顺序,参数类型)
-
仅仅返回类型不同不足以称为方法的重载(重载与方法返回类型无关)
-
仅仅参数变量名称不同是不可以的
public class OverloadDemo {
/**
* 方法的重载 overload
*
* 方法名相同,参数列表不同(参数个数不同,参数类型不同,参数顺序不同)
* 注意:与方法返回类型无关,与修饰符无关
*/
public int sum(int a, int b){
return a + b;
}
// 方法名相同,参数类型不同,构成重载,与返回值类型无关
public float sum(float a, float b){
return (int)(a + b);
}
// 方法名相同,参数数量不同,构成重载,与返回值类型无关
public int sum(int a, int b, int c){
return a + b + c;
}
public void print(String str, int year){
System.out.println("先是String,后是Integer");
}
// 方法名相同,参数顺序不同,构成重载,与返回值类型无关
public void print(int year, String str){
System.out.println("先是Integer,后是String");
}
}
重写(override)
-
子类继承父类,方法名相同,参数列表相同,权限修饰符作用范围要大于父类的范围
-
父类用public修饰的方法被重写,子类中方法的修饰符只能是public
-
静态方法不能被重写
-
final修饰的方法不能被重写
public class OverrideDemo {
/**
* 方法的重写 overwrite
*
* 重写是 方法名相同,返回值相同,参数列表相同(参数个数相同,参数顺序相同,参数类型相同)
* 方法的内容不同(方法内部的代码不同,也可以相同)
*/
class Father{
public void run(){
System.out.println("Father run");
}
public void eat(){
System.out.println("Father eat");
}
}
class Son extends Father{
// 子类Son继承Father,返回类型、参数列表、方法名都和父类相同,重写了方法run()
public void run(){
System.out.println("Son run");
}
// 子类Son继承Father,返回类型、参数列表、方法名都和父类相同,重写了方法eat()
public void eat(){
System.out.println("Son eat");
}
}
}
总结
重写和重载不同点:
- 重写发生必须要有继承关系;重载在同一类中发生。
- 重写要求子类方法返回类型、方法名、参数列表与父类中方法相同;重写要求方法名、参数列表不同,与返回值无关。
重写和重载相同点:
- 都要求方法名通相同