Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

3年前关闭。





我正在研究这个问题,我想知道我做对了。

考虑接口MusicInterface,它具有一个常量数据成员TYPE,
等于“ Nice Music”,以及一个play()方法,该方法在
安慰。类StringedInstrument实现了接口
音乐器材。

i)编写接口MusicInstrument的Java代码。

ii)实现具有变量的抽象类StringedInstrument
整数类型的numberOfStrings和字符串类型的名称。没有
此时可以实现方法播放。

iii)实施具体的类ElectricGuitar,它是以下类的子类
StringedInstrument具有用于初始化名称和构造函数的构造函数
numberOfStrings和适当的方法。

音乐仪器类

public interface MusicInterface {

  final String TYPE= "Nice Music";

  public void play();

}


StringedInstrument类

public abstract class StringedInstrument implements MusicInterface {
    public int numberOfStrings;
    public String name;
}


电吉他课

public class ElectricGuitar extends StringedInstrument{

  public ElectricGuitar(int numberOfString, String name){
    super();
  }

@Override
public void play() {

    System.out.println("The type of music is: "+TYPE);
    }

 }


这个问题似乎很简单,所以我想知道我在理解它时是否犯了任何错误。

最佳答案

有关编写常规Java代码的一些注意事项:

将您的抽象类StringedInstrument中声明的字段的可见性更改为至少protected(或package-private)。这些字段是类状态的一部分,应正确封装。

同样,您的ElectricGuitar构造函数也没有用。它接收2个从未使用过的参数,并且StringedInstrument的相应字段保持未初始化。您应该在StringedInstrument中创建一个匹配的构造函数,并在其中初始化numberOfStringsname字段,例如:

public StringedInstrument(int numberOfString, String name){
    this.numberOfStrings = numberOfStrings;
    this.name = name;
}


ElectricGuitar将使用此超级构造函数:

public ElectricGuitar(int numberOfStrings, String name){
    super(numberOfStrings, name);
}

10-07 12:18