我在覆盖从Java中的父类继承的方法时遇到问题。来自我父类的摘录:
public Character(String spriteLabel, float frameTime, float speed, float x, float y) {
// Setup font and nameplate
this.setupAnimationFrames();
....
this.currentFrame = downFrames[0];
}
private void setupAnimationFrames() {
...
}
在我的孩子课上,我正在尝试:
public class Slime extends Character {
@Override
private void setupAnimationFrames() {
...
}
public Slime() {
super("...", 0.15f, 2,727,300);
}
}
然而,Eclipse告诉我:
The method setupAnimationFrames() of type Slime must override or implement a supertype method
我已经检查过,项目/工作区属性设置为使用Java 1.6,这似乎是导致此错误的常见原因。
为什么Java不允许我覆盖该方法?
答案 0 :(得分:2)
覆盖仅针对那些实例方法的可见到子类。因为,超类setupAnimationFrames()
方法是私有的,它是不可见的子类,因此覆盖在这里不适用。你在这里实现自己的方法。只需删除要编译的代码的@Override
注释。
PS: - 仅用于验证目的,您可以使用任何返回类型实现setupAnimationFrames()
方法,或者您可以抛出任何已检查的异常,它将编译(但当然使用@Override注释)
private String setupAnimationFrames() {
//This compiles in child class,return type is different from parent class
...
}
private List setupAnimationFrames() throws Throwable {
//This compiles in child class ,a checked Throwable has been added to
//method signature
...
}