我有一個名爲CoordMediaPlayer
的類繼承MediaPlayer
。我CoordMediaPlayer
必須能夠使用MediaPlayer
方法,所以這就是爲什麼我使用繼承...繼承和MediaPlayer
的問題是,以實例化一個MediaPlayer
它必須使用MediaPlayer.create()
靜態方法。這不像是它只是調用構造函數,然後我可以正常使用父類的方法。如果我從MediaPlayer
繼承,我不能從繼承MediaPlayer
的類訪問create()
方法我猜是因爲它是靜態方法,我不能覆蓋它。
在理想的我想有我CoordMediaPlayer
,這CoordMediaPlayer
不會包含MediaPlayer
對象,但我將能夠全部MediaPlayer
方法直接從CoordMediaPlayer
實例調用。如果我在我的CoordMediaPlayer
中沒有相同類型的靜態create()
方法,則會更好,當創建我的CoordMediaPlayer
時會完成此創建。
的只有一條路,我發現解決這個問題,就是有一個MediaPlayer
對象在我CoordMediaPlayer
,然後我CoordMediaPlayer
繼承MediaPlayer
,只是通過調用我的MediaPlayer
對象的方法來覆蓋所有我需要的方法...但是這對我來說有點奇怪......有沒有其他方法可以處理這種情況,而我的CoordMediaPlayer
中沒有MediaPlayer
,而是直接調用我繼承的MediaPlayer
方法?
這是我如何解決這個問題,從MediaPlayer的,並在同一時間我CoordMediaPlayer類繼承包含的MediaPlayer的實例,並具有覆蓋我想用MediaPlayer的所有方法...
活動
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
context = getApplicationContext();
int fileResId = context.getResources().getIdentifier("s2", "raw", context.getPackageName());
CoordMediaPlayer cmp = new CoordMediaPlayer(context,fileResId);
cmp.start();
}
CoordMediaPlayer
public class CoordMediaPlayer extends MediaPlayer {
private MediaPlayer mediaPlayer;
private Point coordinates;
@Override
public void start() throws IllegalStateException {
mediaPlayer.start();
}
public CoordMediaPlayer(Context context, int resId) {
mediaPlayer = MediaPlayer.create(context,resId);
}
public void setCoordinates(Point coordinates) {
this.coordinates = coordinates;
}
public Point getCoordinates() {
return coordinates;
}
}
該死的......我看到關於使用MediaPlayer的所有示例都使用了靜態方法,所以我甚至沒有想過檢查是否存在公共構造函數......您與組合/繼承的鏈接也是有用和有趣的。謝謝你的回答,這非常有幫助。 – Laurent