带有抽象基类的Android Activity抛出一个编译错误“不是抽象的,不会覆盖抽象方法......”

时间:2011-01-05 19:53:43

标签: java android

我有一个扩展ListActivity的基类,我想用它来实现在多个不同的Activity实现上使用的许多常用代码。

我想创建这个基类抽象来强制实现子类的方法。

如果我编写方法的基本实现,并在子类中覆盖它,一切正常。

如果我将方法设计为抽象,则会出现以下编译错误:

XXXX.subapps.athletics.AthleticsNewsActivity is not abstract and does not override abstract method getListItems() in XXXX.subapps.BaseCategoryListActivity

基类:

public abstract class BaseCategoryListActivity extends ListActivity
{
    ....
    abstract ArrayList<String> getListItems();
    ....
}

示例子类:

public class AthleticsNewsActivity extends BaseCategoryListActivity
{
    ....
    public ArrayList<String> getListItems()
    {
       ...implementation details....
    }
}

3 个答案:

答案 0 :(得分:3)

如果你扩展一个抽象类,你需要使该方法在扩展类中是抽象的,或者你需要提供实现:

public abstract class BaseCategoryListActivity extends ListActivity
{
    ....
    public abstract ArrayList<String> getListItems();
    ....
}

public class AthleticsNewsActivity extends BaseCategoryListActivity
{
    ....
    public ArrayList<String> getListItems()
    {
       ...implementation details....
    }
}

这应该有用,请注意公共修饰符的更改 重写的方法不能具有更广泛的可见性说明符

另见

答案 1 :(得分:1)

将访问修饰符更改为public abstract

您将其列为:

abstract ArrayList<String> getListItems();

将其更改为:

public abstract ArrayList<String> getListItems()

并为其提供实施。

答案 2 :(得分:1)

可见性不匹配,公开。

超出主题:首选在签名中使用接口(List)而非实现(ArrayList)。