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