0

我遇到了以下问题:

我制作了一个自定义列表 CustomList ,它扩展了 ArrayList 并向其添加了一个新方法:

public class CustomList extends ArrayList<CustomObj> {

    public CustomObj get(String searchName) {
    ...
    }
}

现在在我的 MainActivity.java 中,我创建了这个 CustomList 的新对象,但我正在使用:

List<CustomObj> list = new CustomList();    (1)

并不是:

CustomList list = new CustomList();         (2)

到目前为止,一切都很好!但是当我尝试访问函数 get(String searchName) 时,没有可以使用的函数!

为什么?因为当我通过 (2) 创建 CustomList 时调用它时,它会完全起作用

4

1 回答 1

1

这是因为您正在制作 List(Interface) 没有定义任何此类方法,您正在制作 CustomList 的对象但引用类型是 List 。所以如果您强制在 List 引用上调用此方法,它会给您编译时间错误。这是一个简单多态的例子。

您可以想象一个现代汽车扩展旧车和现代汽车具有 GPS 导航系统的情况,如果您尝试通过不了解 GPS 的旧车参考来获取导航系统的详细信息,那么在这种情况下旧车没有,你不会得到任何东西。

于 2012-08-11T23:19:10.220 回答