重载(Overload)
指的是在同一个类中,存在多个名称相同的方法,但是这些方法的参数个数,参数类型,或者参数顺序不同。在满足前面三个条件任意其中一个的情况下,方法的返回类型和访问修饰符可以不同。
注意: 仅仅只是方法的返回类型不同不能构成重载!!
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.koutufenfang(1);// 参数个数相同,类型不同
test.koutufenfang(1.2);
test.koutufenfang(1, 1.2); // 参数个数相同,顺序不同
test.koutufenfang(1.2, 1);
}
// 参数个数1,参数类型int
public void koutufenfang(int x){
System.out.println("牛逼!");
}
// 参数个数1,参数类型float
public void koutufenfang(double y){
System.out.println("卧槽!");
}
// 参数个数2, 参数类型(float,int)
public void koutufenfang(double x, int y){
System.out.println("碉堡了!");
}
// 参数个数2,参数类型(int, float)
public void koutufenfang(int y, double x){
System.out.println("贼鸡儿恐怖!");
}
}
重写(Override)
子类方法对父类方法的覆盖,要求重写方法的参数个数,类型,顺序与被重写的父类方法完全一致,返回类型必须与被重写方法的返回类型相同或者是其子类,否则视为重载。重写的方法的访问修饰符必须大于等于被重写方法的访问修饰符 (public > protected > default > private) 。重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
public class Test {
public static void main(String[] args) {
Parent person = new Children();
person.getAge();
}
}
class Parent {
Object getAge() {
System.out.println("parent...");
return null;
}
}
class Children extends Parent {
//方法重写,返回值相同或是其子类
@Override
Integer getAge() {
System.out.println("children...");
return 0;
}
}