可能重复:
为什么接口类型的这些变量不用于实例化新对象?
在我正在使用的API下面的代码示例中,有一个变量初始化,"audiodecoder"和"cc".这两个变量属于接口类型.但是,除了actionlisteners之外,关键字implements不会在代码示例中的任何位置使用.
这与我迄今为止学到的关于Java的任何内容都不相符.我已经列出了下面的import语句,认为他们可能对IDecoder和ICodecContextWrapper没有相应的implements语句有一些线索.我也试图找到一些关于以这种方式使用接口的文档但没有成功.有人可以向我解释为什么不使用关键字实现?这个概念是否有一个名称,或许有一些关于这个概念的文献?
编辑:我还应该补充说,变量未在示例代码中使用关键字new声明.
import org.libav.audio.Frame2AudioFrameAdapter;
import org.libav.audio.PlaybackMixer;
import org.libav.audio.SampleInputStream;
import org.libav.avcodec.ICodecContextWrapper;
import org.libav.avformat.IChapterWrapper;
import org.libav.avformat.IFormatContextWrapper;
import org.libav.avformat.IStreamWrapper;
import org.libav.avresample.bridge.AVResampleLibrary;
import org.libav.avutil.IDictionaryWrapper;
import org.libav.avutil.bridge.AVChannelLayout;
import org.libav.avutil.bridge.AVSampleFormat;
import org.libav.bridge.LibraryManager;
import org.libav.data.IFrameConsumer;
import org.libav.util.swing.VideoPane;
IDecoder audioDecoder = player.getAudioStreamDecoder(streamIndex);
ICodecContextWrapper cc = audioDecoder.getCodecContext();
Run Code Online (Sandbox Code Playgroud)
Bri*_*new 13
这个
IDecoder audioDecoder = player.getAudioStreamDecoder(streamIndex);
Run Code Online (Sandbox Code Playgroud)
意味着返回的任何工具 IDecoder.
例如
public IDecoder getAudioStreamDecoder() {
// constructs...
return new IDecoderImplementation();
}
Run Code Online (Sandbox Code Playgroud)
请注意构造内容与返回引用之间的类型区别.
返回的对象将是一个具体的类,但由于它实现了该接口,因此该接口可以引用它.它也可以实现其他接口,并且可以暴露功能,但是你只能以一个接口的形式访问它IDecoder