Song Class,使用抽象类和接口

时间:2015-07-22 16:18:53

标签: java inheritance interface abstract implements

我正在尝试使用此程序,使用Song类的toString输出歌曲的信息。当我输出它时,一切都很好,除了SongType /流派。它仍在输出UNDETERMINED。

 abstract class Song implements ISong //SONG CLASS
 {
private String name; 
private String rating;
private int id;
private SongType genre;

public Song()
{
    name = " ";
    rating = " ";
    id = 0;
    genre = SongType.UNDETERMINED;
}
public Song(String name, String rating, int id)
{
    this.name = name;
    this.rating = rating;
    this.id = id;
    this.genre =Song.UNDETERMINED;
}
public void setName(String name)
{
    this.name = name;
}
public void setRating(String rating)
{
    this.rating = rating;
}
public void setID(int id)
{
    this.id = id;
}
public String getName()
{
    return(this.name);
}
public String getRating()
{
    return(this.rating);
}
public int getID()
{
    return(this.id);
}


@Override
public String toString()
{
    return("Song: " + this.name +
           "\nID: " + this.id +
           "\nRating: " + this.rating +
           "\nGenre: " + this.genre);
}
}

class Pop extends Song //POP CLASS
{   

public Pop(String name, String rating, int id)
{
    super(name, rating, id);
}
}

interface ISong //INTERFACE
{
public enum SongType {POP, COUNTRY, HIPHOP, SOUL, UNDETERMINED;}

}

public class test{
public static void main(String [] args)
{
    Song one = new Pop("Pop Song", "Five", 123); 
    System.out.println(one);
}

}

1 个答案:

答案 0 :(得分:2)

  

当我输出时,除SongType /流派外,一切都很好。它仍在输出UNDETERMINED。

但是除了SongType.UNDETERMINED之外,你在哪里实际设置了你的类型字段?

我建议你给Song类和ISong接口一个public SongType getGenre()方法返回当前类型,以及一个适当的setter方法public void setGenre(SongType genre)和构造函数,如果需要的话接受一个SongType类型参数是。 toString()方法应该调用getGenre()方法来获取当前的类型状态。

最重要的是,在尝试将其打印出来之前,您需要将具体类别中的流派设置为SongType.UNDETERMINED 以外的其他类型。