gpt4 book ai didi

java - 使用接口(interface)声明时,子类中新添加的方法无法被调用

转载 作者:行者123 更新时间:2023-12-02 13:18:27 25 4
gpt4 key购买 nike

我扩展了 ArrayList 并尝试实现增强的 ArrayList。因此,我向 ArrayList 的子类添加了几个函数,如下所示:

public class NiceList<T extends Comparable<T>> extends ArrayList<T> {

public boolean someNewMethods() {

// balh blah blah...
}
}

然后我使用 List 接口(interface)类型声明一个新的 NiceList 对象:

List<String> test = new NiceList<>();

但是后来我发现我为 NiceList 编写的这些方法无法使用刚刚创建的对象 test 来调用:

test.someNewMethods(); // cannot resolve method someNewMethods()

这是否意味着:只要您尝试使用接口(interface)作为声明类型来使您的程序更加通用,您就只能使用该接口(interface)中定义(或要求重写)的那些方法?为什么?你们能给我提供一些引用吗?有什么解决方法可以使我的程序更加通用吗?

在此先谢谢大家了。

========================================

赞赏!现在我想我真正理解了接口(interface)知识的概念。

最佳答案

As long as you trying to use interface as the declarative type to make your program more generic, you can only use those methods that were defined in that interface?

是的

Why is it that way?

因为编译器仅“看到”声明类型的公共(public) API,而不是运行时类型的公共(public) API。您必须将实例转换为定义您想要访问的方法的类型。

Is there any workaround to make my program more generic?

只要你想使用类型List答案是。如果您愿意使用像 MyList<T> extends List<T> 这样的新类型你必须使用MyList任何您想访问新方法的地方。

关于java - 使用接口(interface)声明时,子类中新添加的方法无法被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43676293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com