我正在研究这个问题而且我想知道我做对了。
考虑具有常量数据成员TYPE的接口MusicInterface, 它等于'Nice Music'和方法play(),它显示TYPE 安慰。 StringedInstrument类实现了接口 MusicInstrument。
i)编写MusicInstrument接口的Java代码。
ii)实现具有变量的抽象类StringedInstrument numberOfStrings类型为integer,类型为String类型。没有 此时可以实现方法播放。
iii)实施具体类型的ElectricGuitar,它是的子类 StringedInstrument有一个初始化名称和的构造函数 numberOfStrings和适当的方法。
MusicInstrument类
public interface MusicInterface {
final String TYPE= "Nice Music";
public void play();
}
StringedInstrument类
public abstract class StringedInstrument implements MusicInterface {
public int numberOfStrings;
public String name;
}
ElectricGuitar课程
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);
}
}
这个问题似乎非常简单,所以我想知道我是否在理解它时犯了错误。
答案 0 :(得分:1)
编写传统Java代码的一些注意事项:
将Abstract类StringedInstrument
中声明的字段的可见性更改为至少protected
(或包私有)。这些字段是类的状态的一部分,应该被适当地封装。
此外,您的ElectricGuitar
构造函数有点无用。它接收2个从未使用过的参数,StringedInstrument
各自的字段保持未初始化状态。您应该在StringedInstrument
中创建匹配的构造函数,并初始化其中的numberOfStrings
和name
字段,如:
public StringedInstrument(int numberOfString, String name){
this.numberOfStrings = numberOfStrings;
this.name = name;
}
和ElectricGuitar
将使用此超级构造函数:
public ElectricGuitar(int numberOfStrings, String name){
super(numberOfStrings, name);
}
答案 1 :(得分:1)
如果StringedInstrument类不包含任何多态抽象方法,则没有特别的理由是抽象的。我不认为这个背景会满足抽象无效的恰当例子。
话虽如此,无论你是否抽象,你都应该包含在StringedInstrument中:
public StringedInstrument(int numberOfStrings, String name) {
this.numberOfStrings = numberOfStrings;
this.name = name;
}
和电吉他:
public ElectricGuitar(int numberOfStrings, String name) {
super(numberOfStrings, name);
}
我想如果你把TYPE放在StringedInstrument中,你可以这样做:
public abstract String getType();
然后在你的特定类(ElectricGuitar)中定制getType()产生的内容,这也是一个非常弱的接口使用。
答案 2 :(得分:-1)
public abstract class StringedInstrument implements MusicInterface {
public int numberOfStrings;
public String name;
public StringedInstrument()
{
// This gets called by ElectricGuitar() constructor
}
@Override
public void play()
{
// I meant, you can also HAVE AN IMPLEMENTATION HERE. My Corrections
// OMITTING THIS METHOD BODY DECLARATION, WON'T CAUSE COMPILE ERRORS
// THAT WAS A BAD JOKE BY ME
System.out.println("The type of music is: "+TYPE + " In " + this.getClass().getSimpleName() );
}
}
你的守则坚实