首先需要清楚方法头和方法体的概念,其概念如下:
- 方法头: 修饰符+返回类型 +方法名(形参列表)+抛出异常类型 例如:public void cal(String[] strs, int a) throws xxException
- 方法体: { } 的内容(包括这两个大括号和内部所有语法)
重写
- 与其父类方法方法名、形参列表完全相同
- 修饰符可以相同,可以不同(但不能降低访问权限)
- 返回类型可以相同,也可以是父类方法的子类型
- 抛出异常类型可以相同,可以不同(不同的话也必须为其父类对应方法抛出异常类型的子类型)
- 方法体的内容不一样
例如:假设A类有如下方法:
class A {
protected void speak(int a) throws Exception{
//TODO
}
}
B继承于A,如果B中定义一个方法如下:
class B extends A {
@Override
public void speak(int a) throws IOException {
//TODO
}
}
则对此个例子来说,称B类的speak方法重写了A类中的speak方法
重载
- 方法名必须相同
- 参数列表必须不同
- 访问修饰符、抛出异常类型可以不同
- 方法体的内容可以相同(但相同没有意义)
例如:C 类中的 2 个 speak 方法
class C {
protected void speak(int a) throws Exception{
//TODO
}
public void speak(int a, int b) {
//TODO
}
}