天天看点

【Java】重写与重载的区别与例子

首先需要清楚方法头和方法体的概念,其概念如下:
  • 方法头: 修饰符+返回类型 +方法名(形参列表)+抛出异常类型 例如: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
    }
}      

重载

  • 方法名必须相同
  • 参数列表必须不同
  • 访问修饰符、抛出异常类型可以不同
  • 方法体的内容可以相同(但相同没有意义)
class C {
    protected void speak(int a) throws Exception{
        //TODO
    }

    public void speak(int a, int b) {
        //TODO
    }
}