Java不能覆盖构造函数中使用的方法:Slime类型的方法setupAnimationFrames()必须覆盖或实现超类型方法

时间:2014-10-07 16:47:14

标签: java oop inheritance override

我在覆盖从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不允许我覆盖该方法?

1 个答案:

答案 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
        ...     
    }