我有一个名为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