一、引言
在Java中,我們經常需要定義不同的類和對象,這些類和對象中有一些方法是相似的,但是可能在某些實現細節上有所不同。為了實現多態性,並能夠更好的復用代碼,Java提供了方法重寫的機制。方法重寫也是面向對象的特徵之一,本文將深入介紹Java的方法重寫特性。
二、方法重載和方法重寫的區別
1、方法重載
方法重載是指在同一個類中定義兩個或以上的具有相同名字的方法,但是這些方法擁有不同的參數個數、類型或順序等不同特徵,這樣可以讓程序根據傳入的參數類型或個數來區分使用哪一個方法。
public class OverloadingExample {
public int add(int num1, int num2) {
return num1 + num2;
}
public int add(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
public double add(double num1, double num2) {
return num1 + num2;
}
}
2、方法重寫
方法重寫是指在子類中重新定義一個與父類中相同方法名、參數列表和返回類型的方法,但是子類中的方法實現和父類中的方法實現可能不同。
class Parent {
public void sayHello() {
System.out.println("Hello from Parent");
}
}
class Child extends Parent {
// overriding method
public void sayHello() {
System.out.println("Hello from Child");
}
}
三、方法重寫的規則
當在子類中定義一個和父類中同名、同參數的方法時,子類的方法就重寫了父類的方法。對於方法重寫,有以下幾個規則:
1、返回類型必須相同
重寫的方法必須與原始方法有相同的返回類型,或者是返回類型的子類。void是Java中的關鍵字,表示方法沒有返回值,也是一種返回類型。
2、參數列表必須相同
重寫的方法必須與原始方法有相同的參數數量、順序、標誌符和類型。
3、訪問修飾符不能更嚴格
重寫的方法不能使用比原始方法更嚴格的訪問修飾符。訪問修飾符的順序:public > protected > 默認 > private ,如:父類方法為protected,子類方法不能為private。
4、子類拋出的異常必須是父類拋出異常的子類或者不拋出異常
如果父類方法拋出異常,那麼子類方法必須拋出父類方法拋出的異常的子類或者拋出更少的異常,同時,子類可以選擇不拋出異常。
四、代碼演示
1、方法重寫示例
class Person {
public void print() {
System.out.println("I am a person.");
}
}
class Student extends Person {
// overriding method
public void print() {
System.out.println("I am a student.");
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person();
Student s = new Student();
p.print(); // output: I am a person.
s.print(); // output: I am a student.
}
}
2、異常示例
import java.io.IOException;
class Animal {
public void eat() throws IOException {
System.out.println("Animal is eating.");
}
}
class Tiger extends Animal {
// overriding method
public void eat() throws RuntimeException {
System.out.println("Tiger is eating.");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
Tiger t = new Tiger();
try {
a.eat();
} catch (IOException e) {
System.out.println("IOException occurred: " + e.getMessage());
}
t.eat();
}
}
五、總結
方法重寫是面向對象編程中非常重要的特性,它可以讓我們實現代碼的可復用性和多態性。通過對Java方法重寫特性的詳細講解和示例演示,我們可以更好地掌握這一編程特性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/242177.html