2014-11-05 22 views
0

我目前沒法把我的新的子類來編譯:「構造專輯類專輯不能適用於不同類型的」

public class CompilationAlbum extends Album { 

    private String seriesOfAlbums; 

    public CompilationAlbum(String seriesOfAlbums) { 
     this.seriesOfAlbums = seriesOfAlbums; 
     albumType = "Compilation"; 
    } 
} 

任何人都可以指出我在做什麼錯?錯誤似乎在於構造函數,但我不明白爲什麼會導致錯誤。該錯誤消息還顯示「實際和正式的參數列表長度不同」。

編輯:Album類,減去方法,看起來是這樣的:

import java.util.ArrayList; 

public class Album { 

    private String name; 
    private ArrayList<Track> trackList; 
    private int length; 
    private int fileSize; 
    private double averageRating; 
    private String albumType; 

    public Album(String name){ 
     this.name = name; 
     trackList = new ArrayList<Track>(); 
    } 
+0

繼續談論如何設置名稱,我不會認爲私人領域是一個「問題」。假設有公共或受保護的get/set方法,通常最好使用這些(即this.setName(name))而不是直接修改字段。在這裏看到一些討論:http://stackoverflow.com/questions/2279662/java-protected-fields-vs-public-getters – Shaun 2014-11-05 19:01:27

回答

1

沒有看到專輯的源代碼,我猜它不具有默認構造函數。

你寫這樣的:

public class CompilationAlbum extends Album { 

    private String seriesOfAlbums; 

    public CompilationAlbum(String seriesOfAlbums) { 
     this.seriesOfAlbums = seriesOfAlbums; 
     albumType = "Compilation"; 
    } 
} 

你想這樣的:

public class CompilationAlbum extends Album { 

    private String seriesOfAlbums; 

    public CompilationAlbum(String seriesOfAlbums) { 
     super(seriesOfAlbums); 
     this.seriesOfAlbums = seriesOfAlbums; 
     albumType = "Compilation"; 
    } 
} 

現在,我看到了Album類,你的問題是private成員。製作那些protected,這樣子類也可以得到它們。

+0

我剛剛編輯我的帖子以添加相冊類(減去方法)。 – Zetland 2014-11-05 16:59:33

2

如果不顯式調用父類的構造函數在子類構造函數的第一線,super()一個電話是由編譯器插入。由於相冊沒有無參數構造函數,編譯失敗,因爲插入的調用super()無效。

有兩種方法可以解決這個問題 - 或者使用某個String參數調用現有的超類構造函數(您必須決定什麼對您的特定用例有意義),或者向超類添加無參數構造函數再一次,這個構造函數的行爲將取決於你實際要做什麼)。

這裏有一個辦法,可能是有意義的:

public class CompilationAlbum extends Album { 

    private String seriesOfAlbums; 

    public CompilationAlbum(String name, String seriesOfAlbums) { 
     super(name); 
     this.seriesOfAlbums = seriesOfAlbums; 
     albumType = "Compilation"; 
    } 
} 
+0

我剛剛編輯我的帖子添加相冊類(減法)。 – Zetland 2014-11-05 16:58:46

+0

對 - 這就是我們的想法。如果將CompilationAlbum構造函數更改爲super(seriesOfAlbums),將修復編譯錯誤;另外,因爲這可能對你的實際用例沒有意義,所以你可以給Album添加一個無參數的構造函數。 – Shaun 2014-11-05 17:00:17

+0

好吧,我已經添加了'super(seriesOfAlbums);',它現在效果更好,但是當albumType是一個私有變量時,我仍然在嘗試構建'albumType'時出現錯誤消息。你知道一個解決方法,允許一個子類修改它的超類嗎? – Zetland 2014-11-05 17:08:44