重写(Override)
继承的主要特性是子类能够根据父类已有功能的基础上进行扩展,可是也有可能对父类的属性和方法进行重写/覆写。java
方法的重写
当子类定义了与父类方法名称相同,参数列表相同以及返回值相同时,咱们称之为方法的重写。ide
重写是子类对父类的容许访问的方法的实现过程进行从新编写, 返回值和形参都不能改变。即外壳不变,核心重写!函数
方法的重写规则继承
- 参数列表必须彻底与被重写方法的相同;
- 返回类型必须彻底与被重写方法的返回类型相同;
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:若是父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
- 父类的成员方法只能被它的子类重写。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,可是可以被再次声明。
- 子类和父类在同一个包中,那么子类能够重写父类全部方法,除了声明为private和final的方法。
- 子类和父类不在同一个包中,那么子类只可以重写父类的声明为public和protected的非final方法。
- 重写的方法可以抛出任何非强制异常,不管被重写的方法是否抛出异常。可是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更普遍的强制性异常,反之则能够。
- 构造方法不能被重写。
- 若是不能继承一个方法,则不能重写这个方法。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不一样。返回类型能够相同也能够不一样。table
每一个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。基础
重载规则:扩展
- 被重载的方法必须改变参数列表(参数个数或类型不同);
- 被重载的方法能够改变返回类型,但没法以返回值类型做为重载函数的区分标准。
- 被重载的方法能够改变访问修饰符;
- 被重载的方法能够声明新的或更广的检查异常;
- 方法可以在同一个类中或者在一个子类中被重载。
重写与重载之间的区别
区别点 |
重载(Overload) |
重写(Override) |
参数列表 |
必须修改 |
不能修改 |
返回类型 |
能够修改 |
不能修改 |
异常 |
能够修改 |
能够减小或删除,必定不能抛出新的或者更广的异常 |
权限 |
能够修改 |
必定不能作更严格的限制(能够下降限制) |
总结
方法的重写(Overriding)和重载(Overloading)是java多态性的不一样表现,重写是父类与子类之间多态性的一种表现,重载能够理解成多态的具体表现形式。权限
- 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不一样或数量相同而类型和次序不一样,则称为方法的重载(Overloading)。
- 方法重写是在子类存在方法与父类的方法的名字相同,并且参数的个数与类型同样,返回值也同样的方法,就称为重写(Overriding)。
- 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
- 当须要在子类中调用父类的被重写方法时,要使用super关键字。