public abstract class Rhythm {
/**
* @return duration between {@linkplain Note} in milliseconds
*/
public abstract long getDuration();
public void perform() {
long duration = getDuration();
try {
Thread.sleep(duration);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new RuntimeException(ie);
}
}
}
--------------------------------------------------------------------
@Override public void play(Rhythm rhythm, Note note, NoteCallback noteCallback){
rhythm.getDuration();//想在这里重写getDuration方法,如何做到?
rhythm.perform();
note.getNoteValue();
noteCallback.notePlayed(note);
}
--------------------------------------------------------------------
//重写成如下形式
@Override public long getDuration(){
return (expectedMs);
}
代码附上。在play() 方法中如何直接重写Rhythm类中的抽象方法getDuration()呢? 创建rhythm对象是可以用匿名类的方法实例化的,那是实例化之后 想调用一个重写的getDuration()方法,有什么办法么?在不引入子类继承的前提下。
Java can’t do this, but it can use internal classes to achieve this requirement in disguise
Can’t do it? If it can be done in Java, wouldn’t it be a dynamic language?