-
重载
- 首先要都在同一个类中
- 方法名相同,但是参数列表不同
- 与返回值和访问修饰符无关
- 如果函数名相同,参数列表相同,但是返回值或者修饰符不同,则会提示重复定义
-
重写
- 有继承关系的子类中(子类重写父类方法)
- 方法名相同,参数列表相同(类型,顺序,个数)
- 当方法返回值是void或者基本数据类型,一定要相同。但是如果返回值是引用数据类型,那么子类重写的方法的返回值是父类返回值得同类型或者子类。
- 访问修饰符,重写后的方法的访问范围要大于等于父类,例如父类是protected,那么子类可以是protected或者public
-
吃个栗子
class Parent {
public void test(int... x){}
public void test(int x){}
}
class Child {
// 与从父类继承的方法构成了重载,合法的
public int test(String x){return 1;}
// 正常的重写,合法的
public void bar(int x){}
// 此处错误,重写方法的返回值可以设置为与父类方法相同或是为父类方法返回值的子类
public Sometype bar(int x){return new Sometype();}
}