我有一个扩展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....
}
}
答案 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)。