如何编写此构造函数来建立 or 或其他可能性



我有一个名为"GuitarPlayer"的"抽象"类。然后我声明"吉他手"的两个子类:

  1. 原声吉他手
  2. 电吉他手

然后我有一个名为"乐队"的类。在"乐队"类中,吉他手可以是"原声吉他手"或"电子吉他手"。如何设置类构造函数来建立它?我想过使用"instanceof()"方法,但不确定如何建立逻辑,如果吉他手不是"电吉他手",那么它就是"原声吉他手"。

您的乐队类需要一个两个类都继承自的 GuitarPlayer 类型的成员。

public class Band {
    private GuitarPlayer gPlayer;
    public Band(GuitarPlayer gPlayer) {
        this.gPlayer = gPlayer;
    }
}

因为ElectricGuitarPlayerAcousticGuitarPlayer都继承自GuitarPlayer所以你可以这样做:

Band metalBand = new Band(new ElectricGuitarPlayer());
Band folkBand = new Band(new AcousticGuitarPlayer());

作为与对象交互的各种方式的示例:

// assume GuitarPlayer has a play() method
metalBand.getGuitarPlayer().play();
folkBand.getGuitarPlayer().play();
// assume ElectricGuitarPlayer only has a whammy() method
ElectricGuitarPlayer electric = (ElectricGuitarPlayer) metalBand.getGuitarPlayer();
electric.whammy();
// assume AcousticGuitarPlayer only has a strum() method
AcousticGuitarPlayer acoustic = (AcousticGuitarPlayer) folkBand.getGuitarPlayer();
acoustic.strum();

您应该使用一个try...catch块,当您尝试进行任何铸造时,它会捕获ClassCastException,以防万一东西不适合。

为了更有用,我们需要有关您的确切问题的更多详细信息。

如果你只有一个构造函数,这应该就足够了:

public Band(GuitarPlayer guitarPlayer) {
    this.guitarPlayer = guitarPlayer;
}

或者,您可以为每种类型创建一个构造函数:

    public Band(AcousticGuitarPlayer acousticGuitarPlayer) {
    guitarPlayer = acousticGuitarPlayer;
}
public Band(ElectricGuitarPlayer electricGuitarPlayer) {
    guitarPlayer = electricGuitarPlayer;
}

相关内容

最新更新