gpt4 book ai didi

java - 抽象类 ArrayList toString

转载 作者:行者123 更新时间:2023-12-01 14:06:35 26 4
gpt4 key购买 nike

好吧,我有一个抽象的 Instrument 类

public abstract class Instrument {
String name;

public Instrument(String name) {
this.name = name;
}
public void warmUp() {
System.out.println("Do re mi");
}
public abstract String Play(String notes);
}

我使用 Sax 和 Trumpet 类来扩展和实现抽象方法

public class Trumpet extends Instrument {

public Trumpet(String name) {
super(name);
}
public String play(String notes) {
String str;
str = name + " plays Trumpet: " + notes;
return str;
}

public String getNotes() {
return notes;
}

public String toString(){
String str = name + " plays Trumpet: " + notes ;
return str;
}

萨克斯

public class Sax extends Instrument {

public Sax(String name) {
super(name);
}
public String play(String notes) {
String str;
str = name + " plays Trumpet: " + notes;
return str;
}

public String getNotes() {
return notes;
}

public String toString(){
String str = name + " plays Sax: " + notes ;
return str;
}

}现在我需要创建一个乐队类,该类创建一个由小号和萨克斯组成的乐队。它允许用户添加乐器(萨克斯或小号)并演奏输入音符。当乐队演奏时,这意味着所有乐器都应该演奏输入音符。

public class Band extends Instrument{
ArrayList<Instrument> myBand = new ArrayList<Instrument>();

public Band(String name) {
super(name);
}

public void addInstrument(Instrument a) {
myBand.add(a);
}

public String play(String notes) {
for(Instrument inst : myBand) {
inst.play(notes);
System.out.println(inst.play(notes));
}
return toString();

}

它不一定必须在 arrayList 中,我只是认为它会让事情更容易处理。我相信到目前为止我已经一切顺利,但我的问题出在乐队的 Play 方法上,它应该显示演奏乐器的名称,所有乐器演奏相同的音符。

示例驱动程序:

myBand.addInstrument (new Sax("Anna"));                        
myBand.addInstrument (new Trumpet("Leon"));
myBand.addInstrument (new Sax("Ben"));

myBand.play("Dum da-da DUM");

输出:
安娜吹萨克斯:Dum da-da DUM
莱昂吹小号:Dum da-da DUM
本演奏萨克斯:Dum da-da DUM

我知道我需要一个循环来遍历数组列表,但不确定如何从 sax 和 trumpet 类获取 play 方法,并且它们都播放相同的音符。

感谢您的帮助!

我用循环更新了我的代码,但这是我得到的输出:

Anna plays Trumpet: Dum da-da DUM
Leon plays Trumpet: Dum da-da DUM
Ben plays Trumpet: Dum da-da DUM

最佳答案

您的 Instrument 类声明了一个名为 Play抽象方法,并带有一个 String 参数。通过这样做,从 Instrument 扩展的所有类都必须实现该方法或将其自身声明为 abstract

由于类型 Instrument 已经声明了这样的方法,因此您可以在该类型的任何引用上调用它。

Instrument instrument = new ...// some class that extends from Instrument 
instrument.Play("some note")

Play() 的调用将通过多态性来解决,late-binding 。它将在实现类中使用重写方法。

<小时/>

Java 命名约定规定方法应以小写字母字符开头并使用 camelCase

关于java - 抽象类 ArrayList toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18854688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com