在Java編程語言中,多態、重載和重寫是常用的面向對象編程的概念。雖然它們都與方法相關,但是它們具有不同的意義和使用方法。
多態是一種特性,允許不同的對象對相同的方法進行調用,在運行時確定對象的類型并執行相應的方法。這是Java編程語言中的一項重要而強大的特性。多態通過繼承和實現接口來實現。以下是多態的示例:
class Animal{ void sound(){ System.out.println("Some sound"); } } class Cat extends Animal{ void sound(){ System.out.println("Meow"); } } class Dog extends Animal{ void sound(){ System.out.println("Bark"); } } class Test{ static void makeSound(Animal a){ a.sound(); } public static void main(String args[]){ Animal a1 = new Animal(); Animal a2 = new Cat(); Animal a3 = new Dog(); makeSound(a1);//Some sound makeSound(a2);//Meow makeSound(a3);//Bark } }
在上面的示例中,makeSound() 方法是多態的。這個方法接收一個 Animal 對象,但具體傳遞的是哪個類型的 Animal 對象,最終執行的方法將由傳遞的對象決定。
重載是在同一類中定義多個方法,方法名相同但定義不同的參數類型和個數。在編譯時通過傳遞的參數類型和個數來決定具體的方法,并執行相應的邏輯。以下是重載的一個示例:
class Addition{ static int add(int a, int b){ return a+b; } static int add(int a, int b, int c){ return a+b+c; } } class Test{ public static void main(String args[]){ System.out.println(Addition.add(11, 11)); System.out.println(Addition.add(11, 11, 11)); } }
在上面的示例中,我們定義了兩個同名的方法,但是傳遞的參數是不同的。在執行時,根據不同的參數類型和個數來決定具體的方法。
重寫是指在子類中定義一個與父類方法聲明完全相同的方法,覆蓋父類方法的實現。繼承是實現重寫的前提條件。以下是重寫的一個示例:
class Animal{ void sound(){ System.out.println("Some sound"); } } class Cat extends Animal{ void sound(){ System.out.println("Meow"); } } class Test{ public static void main(String args[]){ Animal a = new Cat(); a.sound(); //Meow } }
在上面的示例中,我們定義了一個 Animal 類和一個 Cat 類。Cat 類繼承了 Animal 類并重寫了 sound() 方法。在 main() 方法中,我們使用 Animal 類型的引用來表示 Cat 對象,并調用了 sound() 方法。由于 Cat 類重寫了 sound() 方法,因此輸出將為 "Meow"。