2011-08-28 86 views
1

道歉,如果我的术语是不正确的,我只是开始的Java(和一般的面向对象编程)7周前。使用对象/继承类的链表

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

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(); 

但是这不起作用。编译器告诉我:

未定义类型示例myExclusiveFunction()方法。

我怎样使用这个功能吗?我真的希望LinkedList能够保存任何示例子类的对象,并且我受到了不编辑示例接口的分配限制。

回答

2

那么你有2种选择:

1 - 改变你的LinkedList存储myExample1而不是Example

LinkedList<myExample1> eList 

2 - 使用instanceof和铸造的类类型myExample1(杂乱)。

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

的接口选项2的功能,将在'exObj'内部成员所做的更改应用于对象链表里面?即我可以使用该方法执行修改对象内容的功能吗? – Paul

+0

你是在链表仍然存在的物体上进行操作,所以是到exObj任何更改将反映在LinkedList的。 –

1

您需要了解有关使用Java进行强制转换的信息。你的行为不起作用,因为myExclusiveFunction()只存在于Example中,而不存在于myExample1中(你可能想在这里遵循正确的Java命名约定)

当你从列表eList.get(i)将得到Example作为返回类型而不是myExample1。为了使用myExclusiveFunction(),您需要先将示例中的类型转换为myExample1。搜索“Java中的类型转换”或“铸造经营者”在谷歌

1

把 内 功能myExclusiveFunction逻辑()。

,你只能调用是像功能