我有一个名为"GuitarPlayer"的"抽象"类。然后我声明"吉他手"的两个子类:
- 原声吉他手
- 电吉他手
然后我有一个名为"乐队"的类。在"乐队"类中,吉他手可以是"原声吉他手"或"电子吉他手"。如何设置类构造函数来建立它?我想过使用"instanceof()"方法,但不确定如何建立逻辑,如果吉他手不是"电吉他手",那么它就是"原声吉他手"。
您的乐队类需要一个两个类都继承自的 GuitarPlayer 类型的成员。
public class Band {
private GuitarPlayer gPlayer;
public Band(GuitarPlayer gPlayer) {
this.gPlayer = gPlayer;
}
}
因为ElectricGuitarPlayer
和AcousticGuitarPlayer
都继承自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;
}