当子类在另一个包中时,不能覆盖超类的抽象方法

时间:2012-12-17 15:05:46

标签: java android inheritance android-library

我的Android库项目中使用抽象方法 abstract public void myMethod(),这个公共抽象类MyClass

我正在尝试在另一个项目中构建此类的具体实现,该项目是一个应用程序项目并引用库项目。子类中的方法实现标有“@Override”,Eclipse给出了以下错误:

  

MySubClass类型的myMethod()方法必须覆盖或实现   超类型方法

我删除“@Override”并且错误成为警告:

  

MySubClass.myMethod()方法不会覆盖继承的方法   来自MyClass的方法,因为它是私有的不同包

这是什么意思?是的,这些类在不同的项目和不同的包中,但这与继承有什么关系?这两种方法都是公开的。

以下是超类的代码:

package com.emret.myPackage;

//Some imports here

public abstract class ThingsProvider {

//Class code here

    abstract public void createThings();

}

这是子类:

package com.emret.myPackage.subPackage;

//Some imports here

public class SmallThingsProvider extends ThingsProvider {

//Class code here

    @Override
    public void createThings() {
        createThing(0, R.drawable.cat, R.raw.cat);
        createThing(1, R.drawable.dog, R.raw.dog);
        createThing(2, R.drawable.cow, R.raw.cow);
        createThing(3, R.drawable.sheep, R.raw.goat);
        createThing(4, R.drawable.bicycle, R.raw.bicycle);
    }
}

2 个答案:

答案 0 :(得分:3)

似乎“yshavits”指出了确切的痛点,但其他限制仍然存在。

我的抽象方法在开始时是包私有的。当我在子类中遇到错误时,我将其更改为public,但在将其更改为public后错误并未消失。

事实证明,只要引用项目完全成功编译,引用项目中的引用就不会更新。引用项目中的任何单个错误都会阻止成功编译,并阻止引用项目检测它的更新类信息。

我引用的项目有另一个错误。即使与上面的类完全分开,它也会阻止成功编译并阻止引用项目中的引用更新。

背景编译器并不像我希望的那样聪明。

答案 1 :(得分:0)

我认为您使用的是Java 1.5,请转到Project / properties,Java Compiler并确保您至少使用Java 1.6。