gpt4 book ai didi

java - 实例化接口(interface)时的方法解析

转载 作者:行者123 更新时间:2023-11-30 03:52:21 25 4
gpt4 key购买 nike

编辑:忘记了代码片段_在此处添加

我正在尝试从《学习 Java》一书中学习 Java,该书列出了以下代码片段作为接口(interface)回调的示例。在此代码片段中,只有 1 个类实现 TextReceiver 接口(interface)。我的问题是 - 由于此代码直接实例化接口(interface),如果有另一个类实现了接口(interface) TextReceiver 并为接口(interface)方法 receivetext 提供了与 TickerTape 中的方法完全不同的方法体,那么如何java会解析TextSource的sendText方法中对receivetext方法的引用吗?这似乎会带来歧义 - 而且,这似乎相信我在网上看到的关于无法实例化接口(interface)的内​​容 - 但想在假设之前确认一下

interface TextReceiver {
void receiveText( String text );
}

class TickerTape implements TextReceiver {
public void receiveText( String text ) {
System.out.println("TICKER:\n" + text + "\n");
}
}

class TextSource {
TextReceiver receiver;

TextSource( TextReceiver r ) {
receiver = r;
}

public void sendText( String s ) {
receiver.receiveText( s );
}
}

我尝试自己写这个来解决这个问题,但由于所有这些类都在同一个类中,所以遇到了编译问题。我知道这听起来很n00bish - 但我想你们可能会提供快速指导。

提前致谢!!!

最佳答案

通过查看对象实例的实际类型在运行时调度方法。

如果你有

 TextReceiver one =  new SomeTextReceiver();
TextReceiver two = new SomeCompletelyDifferentTextReceiver();

然后调用

 one.receiveText();

JVM 将查看实际对象并查看它属于哪个类。

该调用将被分派(dispatch)到该运行时类提供的实现。

编译时,这里已知的只是接口(interface),因此编译器将检查接口(interface)中是否存在这样的方法,但在运行时可以确定实际的类(class)并将其分派(dispatch)到。

请注意,此过程对于静态方法是不同的。它们没有关联的实例,编译器会决定调用哪个实现。因此,您无法真正重写静态方法来获取运行时调度。

关于java - 实例化接口(interface)时的方法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113133/

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