0

Hello iveは、インターフェースの実装に2つの新しい機能を追加しました。

これは実装ファイルです...

import au.edu.uow.Collection.Album;
import java.util.ArrayList;

public class CDAlbum implements Album {
    private String Title;
    private String Genre;
    private String Artist;
    private String MediaType;
    private ArrayList<String> trackList;

    public CDAlbum(String TempTitle, String TempGenre, String TempArtist, ArrayList<String> TempTracklist, String TempMediaType){
        //Set initail variable values
        Title = TempTitle;
        Genre = TempGenre;
        Artist = TempArtist;
        trackList = TempTracklist;
        MediaType = TempMediaType;
    }
    //Accessor Functions
    public String getMediaType(){
        //Return Media Type
        return MediaType;
    }
    public String getTitle(){
        //Return Title
        return Title;
    }
    public String getGenre(){
        //Return Genre
        return Genre;
    }
    public String getArtist(){
        //Return Artist
        return Artist;
    }
    public ArrayList<String> getTrackList(){
        //Return Tracklist
        return trackList;
    }
}

下の2つの関数は、追加された関数(getArtist()、getTrackList())です。問題は、クラスファイルからこれらの関数を呼び出そうとすると、次のエラーが発生することです。

./au/edu/uow/UserInterface/UserInterface.java:95: cannot find symbol
symbol  : method getArtist()
location: interface au.edu.uow.Collection.Album
            System.out.println(albumCollection.get(number).getArtist());
                                                          ^
./au/edu/uow/UserInterface/UserInterface.java:98: cannot find symbol
symbol  : method getTrackList()
location: interface au.edu.uow.Collection.Album
            ArrayList<String> trackList = albumCollection.get(number).getTrackList();

関数を呼び出すとき

import au.edu.uow.Collection.Album;

System.out.println(albumCollection.get(number).getArtist());

//Access the track titles
ArrayList<String> trackList = albumCollection.get(number).getTrackList();
//Output collection
int arrayListSize = trackList.size();
for(int i = 0; i < arrayListSize; i++)
{
    System.out.println( i + ": " + trackList.get(i));
}
4

4 に答える 4

0

インターフェイスに新しいメソッドを追加するときは、実装クラスに実装する必要があります。

albumCollection.get(number)のタ​​イプを確認します。albumCollection.get(number)がAlbumを返す場合は、getArtist()を呼び出すことができます。

于 2012-08-26T05:58:39.823 に答える
0

AlbumはalbumCollection.get(number)の戻りタイプですか?その場合は、getArtistメソッドとgetTrackListメソッドもインターフェイスに追加する必要があります。

于 2012-08-26T06:01:53.557 に答える
0

Albumも指定もしgetArtistませんgetTrackList

public interface Album {
    /**
     * This method returns the media type of the album. 
     * @return the media type of the album, either CD or DVD
     * @see #getTitle()
     * @see #getGenre()
     */
     String getMediaType();

    /**
     * This method returns the title of the album. 
     * @return the title of the album
     * @see #getMediaType()
     * @see #getGenre()
     */
     String getTitle();

    /**
     * This method returns the genre of the album. 
     * @return the genre of the album
     * @see #getTitle()
     * @see #getMediaType()
     */
    String getGenre();

}

...CDAlbumします。

がであるかどうかを判断するにAlbumは、;をチェックします。次に、それCDの場合は、キャストしてから呼び出すことができます。CDAlbumDVDAlbumAlbum.getMediaTypeCDAlbumgetArtistgetTrackList

for (final Album album : albumCollection) {
  final String type = album.getMediaType();
  System.out.print(type + " album: " + album.getTitle()
      + " (" + album.getGenre() + ") - ");
  if (type.equals("CD")) {
    final CDAlbum cd = (CDAlbum) album;
    System.out.println(cd.getArtist());
    int n = 0;
    for (final String track : cd.getTrackList()) {
      System.out.printf("#%2d - %s\n", ++n, track);
    }
  } else {
    final DVDAlbum dvd = (DVDAlbum) album;
    System.out.println(dvd.getDirector());
    System.out.println(dvd.getPlotOutline());
  }
}
于 2012-08-26T06:18:07.257 に答える
0

たとえば、スーパークラスを作成し、そこからとMasterAlbumsを拡張します。メソッドとをスーパークラスに配置します。サブクラスでオーバーライドしないでください。これを呼び出すと、スーパークラスメソッドが参照され、アーティストとトラックリストは次のようになります。印刷されます。CDAlbumDVDAlbumgetArtist()getTrackList()System.out.println(albumCollection.get(number).getArtist());

于 2012-08-26T06:28:11.547 に答える