在Java中,組合(Composition)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許一個(gè)類包含其他類的對(duì)象。多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)。在Java中,多態(tài)性通常通過繼承和接口實(shí)現(xiàn)。然而,組合也可以實(shí)現(xiàn)多態(tài)性,通過使用引用類型來指向子類的對(duì)象。
以下是一個(gè)使用組合實(shí)現(xiàn)多態(tài)性的示例:
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
類,它包含一個(gè)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
類來展示多態(tài)性: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
}
}
在這個(gè)示例中,我們使用AnimalContainer
類的animal
引用來存儲(chǔ)不同類型的子類對(duì)象(Dog
和Cat
)。當(dāng)我們調(diào)用performSound()
方法時(shí),實(shí)際執(zhí)行的是子類對(duì)象的makeSound()
方法,從而實(shí)現(xiàn)了多態(tài)性。