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;
}
}