面向對象編程(OOP)的三大特征之一是繼承。在JAVA中,繼承使用關鍵字"extends"實現。繼承提供了代碼重用和子類擴展的機會。例如,我們可以定義一個Animal類,然后定義一個Dog子類,這個Dog子類將繼承來自Animal類的屬性和方法。
//Animal類的定義 public class Animal { protected String name; protected int age; public Animal(String name, int age) { this.name = name; this.age = age; } public void makeSound() { System.out.println("Animal is making sound."); } } //Dog類的定義 public class Dog extends Animal { public Dog(String name, int age) { super(name, age); } //重寫繼承自Animal類的makeSound方法 @Override public void makeSound() { System.out.println("Dog is barking."); } }
而多態性(Polymorphism)是OOP的另一個關鍵特征,是指不同對象對同一消息做出不同的響應。在JAVA中,多態性可以通過方法重載(Overloading)和方法重寫(Overriding)來實現。
例如,在上面的例子中,我們可以定義一個接收Animal類對象的方法,然后調用這個方法,傳遞一個Animal對象或一個Dog對象來測試多態性。如果傳遞Animal對象,那么調用的是Animal類中的makeSound方法;如果傳遞Dog對象,則調用的是重寫后的Dog類中的makeSound方法。
public class AnimalTest { public static void main(String[] args) { Animal animal = new Animal("Animal", 1); Dog dog = new Dog("Dog", 2); animal.makeSound(); //輸出:Animal is making sound. dog.makeSound(); //輸出:Dog is barking. Animal animalDog = new Dog("AnimalDog", 3); animalDog.makeSound(); //輸出:Dog is barking. } }
在上面的例子中,animalDog對象的類型是Animal,但它的實際類型是Dog,因為它是由Dog類實例化出來的。當調用animalDog對象的makeSound方法時,會調用Dog類中重寫后的makeSound方法。這就是多態性的體現。