MediaPlayer
を継承するCoordMediaPlayer
というクラスがあります。私CoordMediaPlayer
問題は、それがMediaPlayer.create()
静的メソッドを使用する必要がありますMediaPlayer
をインスタンス化することである継承とMediaPlayer
...私は、継承を使用する理由それはですのでMediaPlayer
の方法を使用することができなければなりません。コンストラクタを呼び出しただけでは親クラスのメソッドを正常に使うことはできません。 MediaPlayer
から継承した場合、MediaPlayer
を継承するクラスのcreate()
メソッドにアクセスすることはできません。静的メソッドであるため、オーバーライドできません。私は私のCoordMediaPlayer
を持ってしたいと思う理想的で
、このCoordMediaPlayer
はMediaPlayer
オブジェクトが含まれていないだろうが、私はCoordMediaPlayer
インスタンスから直接すべてのMediaPlayer
メソッドを呼び出すことができるでしょう。私のCoordMediaPlayer
に同じ種類の静的なcreate()
メソッドを持たない方が良い場合は、CoordMediaPlayer
をインスタンス化するときにこの作成が行われます。
私はこの問題に対処することが分かっ唯一の方法は、MediaPlayer
から、その後の私のCoordMediaPlayer
継承、私CoordMediaPlayer
でMediaPlayer
オブジェクトを持っていると私は私のMediaPlayer
オブジェクトのメソッドを呼び出すことで、単に必要なすべてのメソッドをオーバーライドすることです...しかし、それは私には奇妙に見える...私のCoordMediaPlayer
にMediaPlayer
を持たずに、この種の状況に対処する他の方法がありますが、私の継承したMediaPlayer
メソッドを直接呼び出すのですか?
これは私がこれに対処する方法、私のCoordMediaPlayerクラスは、MediaPlayerの継承と同時に、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;
}
}
Damned ...私がMediaPlayerを静的メソッドで使用しているのを見たので、パブリックコンストラクタがあるかどうかをチェックすることさえできませんでした...コンポジション/継承へのあなたのリンクも便利で面白いです。あなたの答えをありがとう、それは非常に有用だった。 – Laurent