Java中方法的重載和重寫,貫穿在整個Java的學習和運用中,在面試中也經常被問到。
一 方法的重載
要滿足以下條件:
1 同一個類中;
2 同名不同參:這裏的參數不同包括參數類型不同,參數個數不同,參數順序不同。
注意:
1 重載對方法的返回值沒有要求;
2 構造方法也能重載。
方法的重載舉例:
- package com.anjoyo.demo;
- public class Person {
- private String name;
- private int age;
- public Person() {
- }
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public void move(){
- System.out.println("can move !");
- }
- public void move(String s){
- System.out.println(s+" can move !");
- }
- }
上面就是構造方法Person()和一般方法Move()的重載
重載方法在調用的時候,通過傳入參數的不同來區分。
二 方法的重寫(覆蓋,覆寫)
要滿足如下條件:
1 在父子類之間;
2 同名且同參,返回值類型也相同;
3 子類方法的修飾符不能比父類方法的修飾符更封閉:這裏指
4 子類方法拋出的異常不能比父類方法中拋出的異常更寬泛
舉例如下:
父類Person:
- package com.anjoyo.demo;
- public class Person {
- protected void move() throws RuntimeException{
- System.out.println("can move !");
- }
- }
子類Student:
- package com.anjoyo.demo;
- public class Student extends Person{
- public void move() throws NullPointerException{
- System.out.println("Student running !");
- }
- }
這樣就構成了move()方法的重寫。
說明:
1 Person中的方法修飾符爲protected,所以在Student類的move()方法的修飾符可以是protected,可以是public。
2 Person中的move()方法拋出RuntimeException,所以Student中的move()方法只能拋出RuntimeException,或者RuntimeException的子類,不能拋出Exception,IOException等。