java中composition如何實(shí)現(xiàn)多態(tài)性

小樊
81
2024-09-24 01:29:01

在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)性的示例:

  1. 首先,創(chuàng)建一個(gè)基類Animal
public class Animal {
    public void makeSound() {
        System.out.println("The animal makes a sound");
    }
}
  1. 然后,創(chuàng)建兩個(gè)子類DogCat,它們都繼承自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");
    }
}
  1. 接下來,創(chuàng)建一個(gè)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();
    }
}
  1. 最后,在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ì)象(DogCat)。當(dāng)我們調(diào)用performSound()方法時(shí),實(shí)際執(zhí)行的是子類對(duì)象的makeSound()方法,從而實(shí)現(xiàn)了多態(tài)性。

0