在链接列表中使用对象/继承的类

时间:2011-08-28 10:55:32

标签: java

如果我的术语不正确,我很抱歉,我在6周前才开始使用Java(以及一般的OO编程)。

家庭作业给了我一个接口类:

public interface Example {
    void Function();
    //etc
}

然后我有几个“实现”接口类的类,例如:

public class myExample1 implements Example {
    void Function(){ stuff;}
    public void myExclusiveFunction() { stuff;}
        ...
}

myExample1类中,我定义了Example中的函数,但也为myExample1类添加了一些特定的函数。

在我的主程序中,我创建了一个LinkedList<Example> eList = new LinkedList<Example>。在链接列表中,我存储了多种类型的示例(myExample1,myExample2等)。我想做点什么:

eList.get(i).myExclusiveFunction();

然而,这不起作用。编译器告诉我:

  

对于Example类型,未定义myExclusiveFunction()方法。

我该如何使用此功能?我真的想让LinkedList能够保存任何Example子类的对象,并且我在一个赋值限制下不编辑Example接口。

3 个答案:

答案 0 :(得分:2)

你有两个选择:

1 - 将您的LinkedList更改为存储myExample1而不是Example

LinkedList<myExample1> eList

2 - 使用instanceof并将类强制转换为类型myExample1(凌乱)。

 Example exObj = eList.get(i);
 if (exObj instance of myExample1) {
     ((myExample1)exObj).myExclusiveFunction();
 }

答案 1 :(得分:1)

您需要了解Java中的转换。您的工作不起作用,因为myExclusiveFunction()仅存在于Example中而不存在于myExample1中(您可能希望在此处遵循正确的Java命名约定)

当您从列表eList.get(i)中获取项目时,您将获得Example作为返回类型而不是myExample1。要使用myExclusiveFunction(),您需要先将类型从Example转换为myExample1。在Google中搜索“Java中的类型转换”或“转换运算符”

答案 2 :(得分:1)

放 里面的myExclusiveFunction逻辑 功能()。

您只能调用界面中的函数,如函数