Java ArrayList继承实现

Java ArrayList继承实现,java,inheritance,Java,Inheritance,我有一个接口SortingToolTemplate,其中包含一个ArrayList作为实例变量 由于我将有许多类实现此接口,但ArrayList的数据类型不同,因此我声明如下: ArrayList<Object> data = null; } 其中一个类代码(尚未实现,但已显示错误): 公共类WordSort实现排序工具模板{ 数据=新的ArrayList(); @凌驾 公共int getMax(){ 返回0; } @凌驾 公共int getMaxOccurrence(int ma

我有一个接口
SortingToolTemplate
,其中包含一个
ArrayList
作为实例变量

由于我将有许多类实现此接口,但ArrayList的数据类型不同,因此我声明如下:

ArrayList<Object> data = null;
}

其中一个类代码(尚未实现,但已显示错误):

公共类WordSort实现排序工具模板{
数据=新的ArrayList();
@凌驾
公共int getMax(){
返回0;
}
@凌驾
公共int getMaxOccurrence(int max){
返回0;
}
@凌驾
public void getData(){
}
@凌驾
公开无效显示结果(){
}
@凌驾
public int getMaxPercentage(){
返回0;
}

}我不知道您的代码是怎么回事,但我会使用泛型而不是对象


我也会在左侧使用List,这样有人可以使用不同的实现,例如LinkedList

您需要对接口进行参数化。以下是一个简化的示例:

public interface MyInterface<T> {
...
  List<T> getList();
}

public class MyFirstImplementation implements MyInterface<Integer> {
  private List<Integer> myList = new ArrayList<>();

  @Override 
  public List<Integer> getList() {
    return myList;
  }
}

public class MySecondImplementation implements MyInterface<String> {
  private List<String> myList = new ArrayList<>();

  @Override 
  public List<String> getList() {
    return myList;
  }
}
公共接口MyInterface{
...
List getList();
}
公共类MyFirst实现实现MyInterface{
private List myList=new ArrayList();
@凌驾
公共列表getList(){
返回myList;
}
}
公共类MySecondImplementation实现MyInterface{
private List myList=new ArrayList();
@凌驾
公共列表getList(){
返回myList;
}
}

这里有两个独立的问题

[1] 不能在类或接口中放置随机语句;在类或接口中,只能放置字段、方法、构造函数、(静态)初始值设定项和其他类型定义。您正在添加语句(
list=new ArrayList();
)-您不能这样做。将其移动到构造函数,或者直接初始化它:
List List=new ArrayList()

[2] 不能将字符串列表指定给对象列表,因为它们不相同。您可以向对象列表中添加一个整数(因为整数是一个对象),但是,现在字符串列表中有一个整数,这就是为什么java不允许这样做的原因。修复方法是有一个
List List=new ArrayList()
这很好,但是请注意,您不能向
列表添加任何内容。(无效除外)

您可能想要的是:

公共类WordSort实现排序工具模板{
私有列表=新的ArrayList();
}

还要注意,您根本不能在接口中声明字段。看起来您可以,但您正在声明一个常量(它们是公共的、静态的和最终的,即使您没有这样说)。这不是接口的用途。

字符串是对象,但对象确实需要是字符串。这就是为什么: List List=new ArrayList()或new ArrayList()不起作用

如果您查看ArrayList类,您将看到它使用泛型。 一些人向你建议并创建了一些代码。你应该跟着


我有一些东西可以帮助您:

向我们展示代码,这样我们就可以重现您的问题。您需要使用Java的泛型,但如果看不到其余的可重复性最低的代码,就无法引导您找到解决方案。有关java中为什么不能说
List=new ArrayList()
的一般性信息,请参阅:感谢您的详细回答,我们仍在学习这一切。我将使用一个抽象类而不是接口,并使用正确的数据类型在每个类中实例化ArrayList。
interface SortingToolTemplate {

ArrayList<Object> data = null;

int getMax();
int getMaxOccurrence(int max);
void getData();
void showResult();
int getMaxPercentage();
public class WordSort implements SortingToolTemplate {

data = new ArrayList<String>();

@Override
public int getMax() {
    return 0;
}

@Override
public int getMaxOccurrence(int max) {
    return 0;
}

@Override
public void getData() {

}

@Override
public void showResult() {

}

@Override
public int getMaxPercentage() {
    return 0;
}
public interface MyInterface<T> {
...
  List<T> getList();
}

public class MyFirstImplementation implements MyInterface<Integer> {
  private List<Integer> myList = new ArrayList<>();

  @Override 
  public List<Integer> getList() {
    return myList;
  }
}

public class MySecondImplementation implements MyInterface<String> {
  private List<String> myList = new ArrayList<>();

  @Override 
  public List<String> getList() {
    return myList;
  }
}