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