在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()
方法,从而实现了多态性。