在Java中,組合(Composition)是一種結構型設計模式,它允許一個類包含其他類的對象。多態性是指允許不同類的對象對同一消息做出響應。在Java中,多態性通常通過繼承和接口實現。然而,組合也可以實現多態性,通過使用引用類型來指向子類的對象。
以下是一個使用組合實現多態性的示例:
Animal
:public class Animal {
public void makeSound() {
System.out.println("The animal makes a sound");
}
}
Dog
和Cat
,它們都繼承自Animal
類:public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("The cat meows");
}
}
AnimalContainer
類,它包含一個Animal
類型的引用:public class AnimalContainer {
private Animal animal;
public AnimalContainer(Animal animal) {
this.animal = animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
public void performSound() {
animal.makeSound();
}
}
main
方法中,使用AnimalContainer
類來展示多態性:public class Main {
public static void main(String[] args) {
AnimalContainer container = new AnimalContainer(new Dog());
container.performSound(); // 輸出:The dog barks
container.setAnimal(new Cat());
container.performSound(); // 輸出:The cat meows
}
}
在這個示例中,我們使用AnimalContainer
類的animal
引用來存儲不同類型的子類對象(Dog
和Cat
)。當我們調用performSound()
方法時,實際執行的是子類對象的makeSound()
方法,從而實現了多態性。