重载:
要求:同一个类中,方法名相同,参数类型或参数个数不同。
例如:类的构造器,Arrays类中重载sort();
如下方法尽管权限修饰符、返回值不同,但是仍然构成重载。
总结:重载条件就是“两同一不同”:类相同,方法名相同,参数类型或参数个数不同。 与权限修饰符,返回值类型,形参变量名等都没关系。
重写:
子类继承父类的方法后,对父类中同名同参的方法进行覆盖操作。重写后,子类对象调用的是子类中重写的方法。
class Person {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getInfo(){
return "name:" + name + "id: " + id;
}
}
public class User extends Person{
private String birth;
@Override
public String getInfo() {
// return super.getInfo() + "birth: " + birth;
return "name: " + getName() + "id: " + getId() + "birth: " + birth;
}
}
方法声明:权限修饰符 返回值类型 方法名(形参列表) throws 异常类型{
//方法体
}
- 子类中重写的方法与父类中被重写的方法的方法名,形参列表相同。
- 子类中重写的方法的权限修饰符不小于 父类中被重写的方法的权限修饰符。
- 返回值类型:
1.父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void。
2.父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类(多态的体现)。
3.父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是double)。 - 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
子父类中有static修饰的,不是重写。
class Person {
private int handleNum(int i,int j) throws RuntimeException{
return i / j;
}
}
public class User extends Person{
public int handleNum(int m,int n) throws Exception{
return m / n;
}
}