重载和重写的区别
- 重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法的返回值和访问修饰符可以不同,发生在编译时。
public String a(int x,String y)
public String a(int x)
public Integer a(String y,int x)
public Integer a(String y,String x)
private Integer a(int x,String y)
- 重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。
public abstract class Test {
public abstract String a(int x,String y);
private abstract String b(int x,String y);
public abstract String c(int x,String y) throws RuntimeException;
}
public class SubTest extends Test{
@Override
public String a(int x, String y) {
return null;
}
@Override
public String c(int x, String y) throws Exception {
return null;
}
@Override
public Integer a(int x, String y) {
return null;
}
@Override
protected String a(int x, String y) {
return null;
}
@Override
public String c(int x, String y) throws NullPointerException {
return null;
}
@Override
public String c(int x, String y) throws Exception {
return null;
}
}