2012-08-26 61 views
0

Hello ive添加了兩個新功能來實現接口。Java實現一個接口。具有附加功能

這是實現文件...

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; 
    } 
} 

底部的兩個功能是附加功能(getArtist(),getTrackList()) 有問題IM是,當我試圖調用這些函數從類文件它給我以下錯誤。

./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)); 
} 
+0

你能告訴我們你的界面'相冊'以及?!似乎這些方法在那裏丟失。 –

+0

提供了Album類的代碼 –

+0

@DanielDC'Album'既不指定getArtist也不指定getTrackList,只有CDAlbum可以。您可以通過選中「Album.getMediaType」來確定「Album」是「CDAlbum」還是「DVDAlbum」。那麼,如果*是* CD,則可以投射到'CDAlbum',然後調用'getArtist'和'getTrackList'。 – oldrinb

回答

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.getMediaType來確定Album是否爲CDAlbumDVDAlbum;那麼,如果它一張CD,則可以投射到CDAlbum,然後調用getArtistgetTrackList

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()); 
    } 
} 
+0

上帝的母親!謝了哥們 –

0

當你在你的界面,你必須在實現類實現添加新的方法。

檢查albumCollection.get(數)類型 如果albumCollection.get(數量)返回相冊,那麼你可以調用getArtist()

+0

你的意思是我必須在界面中聲明它?有沒有另一種方法,以便我可以在它的接口類? –

0

是專輯的albumCollection.get(數)的返回類型?如果是這樣,那麼您需要將getArtist和getTrackList方法添加到您的界面中。

+0

即時通訊無法編輯界面文件 –

+0

然後albumCollection.get(編號)返回類型應該是CDAlbum。但是,這會殺死有界面的整個點。 – Infinity

+0

我可以只將變量公開並讓它們像那樣打印 –

0

創建一個超類比方說MasterAlbums和超級class.Do擴展您CDAlbum和it.Place DVDAlbum方法getArtist() & getTrackList()不覆蓋它在subclasses.Now當你調用System.out.println(albumCollection.get(number).getArtist());,它將引用超類方法,並且您的藝術家&曲目列表將被打印。