1.重写(覆盖Override)
重写发生在接口与实现类,父类与子类之间,特点如下:
方法名,返回值类型必须相同,参数列表必须相同
访问权限只能等于或者大于父类的访问权限
不能重写构造方法
返回值类型是子类或者相等
子类覆盖父类要遵循“两同两小一大”
“两同” 即方法名相同,形参列表相同
“两小” 指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等。
(注:类方法返回值是double,子类修改成int为什么不行呢?
这是因为返回值类型更大或者更小,是对于同一类型而言的。也就是说,返回值的类型需要有继承关系才去考虑大小这个 概念。类型不同,肯定不是方法重写)
“一大” 指的是子类方法的访问权限应比父类方法的访问权限更大或相等。
注意:覆盖方法和被覆盖方法要么都是类方法(用static修饰的方法),要么都是实例方法,不能一个是类方法一个是实例方法,否则编译出错。
2.重载(Overload)
重载发生在本类,方法名相同,参数列表不同,与返回值无关,特点如下:
方法名必须相同
方法的参数列表一定不一样。
访问修饰符和返回值类型可以相同也可以不同。
构造器可以重载
最后来个表格总结
比较 | 重写(覆盖) | 重载 |
---|---|---|
类的数量 | 接口与实现类、父子类 | 本类 |
方法名称 | 一致 | 一致 |
参数列表 | 不能修改 | 必须修改 |
返回类型 | 不能修改 | 可以修改 |
异常 | 只能小于或等于父类异常 | 可以修改 |