子類別繼承父類別後,可以在子類別中書寫一個與父類別同名同參的方法,從而實現對父類別中同名同參數的方法的覆寫,我們把這個過程叫做方法的重寫(override)
2.1 當父類別的方法滿足不了子類別的需求的時候,需要在子類別中對該方法進行重寫
2.2 題目與分析
例如存在一個父類別Peple,子類別Chinese,父類別中有一個say ()方法,輸出人在說話,但是我想要的時子類時候調用時輸出中國人在說話,很顯然直接調用方法不行,所以需要在子類中對say方法進行方法的重寫
2.3 範例程式碼
People類別
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public void say(){ System.out.println("人在说话"); } }
Chinese類別
public class Chinese extends Peple{ public Chinese() { } @Override public void say() { System.out.println("中国人在说话"); } }
Test03類別
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); //当进行方法重写时,调用的是子类的say()方法 } }
2.4 範例程式碼執行截圖
@Override 权限修饰符 返回值类型 方法名(形参列表){ //子类重写的方法的权限修饰符的访问权限必须大于等于父类的,但是父类不能是private //当父类的返回值类型为基本数据类型或者为void时,子类方法的返回值类型也应该为对应的基本数据类型或者void }
#3.2.1 子類別重寫的方法的存取權限應該大於等於父類別方法的存取權限
a 範例程式碼
People類別
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } //没有写访问权限的话,默认是default访问权限 void say(){ System.out.println("人在说话"); } }
Chinese類
public class Chinese extends Peple{ public Chinese(){ } //父类say方法的访问权限为default,子类say方法的访问权限为public, // 符合子类方法访问权限大于等于父类方法访问权限的要求 @Override public void say() { System.out.println("中国人在说话"); } }
Test03類別
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); } }
b 範例程式碼執行截圖
如果父類別方法的傳回值類型是基本資料類型,那麼子類別重寫的方法的傳回值類型也必須是對應的基本資料型別
a 範例程式碼
People類別
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public double add(int a,int b){ return a+b; } }
Chinese類別
public class Chinese extends Peple{ public Chinese(){ } @Override public double add(int a,int b) { return a+b+1; } }
Test03類別
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); System.out.println("求和之和再加上1的结果为: "+c.add(2, 3)); } }
b 範例程式碼執行截圖
3.2.3 當父類別方法的回傳值類型為void時,子類別重寫的方法的回傳值類型也為void
a 範例程式碼
People類別
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public void eat(){ System.out.println("人的主食一般是熟食"); } }
Chinese類別
public class Chinese extends Peple{ public Chinese(){ } @Override public void eat() { System.out.println("中国人的主食是大米或者小麦"); } }
Test03類別
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
b 範例程式碼運行截圖
3.2.4 當父類別的方法被static修飾的時候,子類別是不能重寫該方法的
a錯誤範例程式碼
People類別
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public static void eat(){ System.out.println("人的主食一般是熟食"); } }
Chinese類別
public class Chinese extends Peple{ public Chinese(){ } @Override public void eat() { System.out.println("中国人的主食是大米或者小麦"); } }
Test03類別
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
b 範例程式碼執行截圖
#編譯時idea給出的錯誤提示
強制執行後給出的錯誤提示
3.3.1 複製法
步驟
1.先直接複製(Ctrl C)父類別中需要被子類別重寫的那個方法
2.貼上(Ctrl V)到子類別中
3.修改子類別中的功能,便於實現父類別實作不了的需求
操作截圖展示
3.3.2 編譯器提示法
#步驟
1.先在子類類別體中,非方法內位置,寫入一個英文@符號
2.選取提示中的Overide/implement methods…
3.雙擊後彈出一個重寫方法選擇清單彈窗
4.根據提示選取對應的需要重寫的方法
5.點擊ok按鈕後會在子類別中產生一個你選取方法的重寫方法
6.把產生的重寫方法中的自動產生的首行去掉,然後根據需求在方法體裡面寫入合適的語句
操作截圖展示
3.3.3 快捷鍵法
步驟
1.把滑鼠移到重寫方法應該產生的位置
2.同時按下鍵盤上的Alt鍵和Insert鍵,
3.在彈出框中,選取Override Methods
4.雙擊後會彈出一個介面,在介面中選取需要被子類別重寫的方法
5.點擊OK按鈕後會產生所需的重寫方法
6.去掉重寫方法中自動產生的首行,然在其方法體裡面寫入適當的語句
#操作截圖展示
######################################以上是如何掌握Java中的方法重寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!