我已经从java文档开始学习java 8中的java文档。当我研究java.nio.file.Path时,java文档的第一行是
在Java 7发行版中引入的Path类。
这意味着Path是一个类,但当我查看这里时,我发现Path是一个interface。
那么,为什么java文档说它是一个类。
我的另一个疑问是,如果Path是一个interface,那么Path方法(比如getRoot()、isAbsolute()和所有其他方法)是如何工作的,因为没有Path接口方法的实现。
我知道在一个陈述中问两个不同的问题很麻烦,但我不知道如何把这两个问题分开。
编辑:这个问题不能重复这,因为在这问题中,发问者要求实现Path接口,但是这里我问这个接口的方法是如何工作的,我的意思是它是由JVM内部执行的,还是使用任何其他机制来执行它们。
发布于 2015-02-18 08:59:45
Path是一个普通的interface,它与任何其他interface一样,是由一个具体的class实现的,该class声明实现它,并为interface的abstract方法提供具体的方法。因此,Path的方法没有什么特别之处。正如关联问题所解释的,这个interface有一些普通的实现。
您不应该感到困惑,因为它在文档中被称为“类”。虽然狭义上的class是一种不同于interface或enum的类型,但这些类型都是术语最广义的类。反映这一点的事实是,它们都存储在class file中,并通过ClassLoader上的操作名称loadClass加载。在这些地方,不区分接口和类。从这个角度来看,接口和枚举只是具有特殊属性的类(类似地,注释是具有特殊属性的接口)。
在文档中,当您使用类的方式没有不同时,在广义上使用“class”一词是有意义的,即您在Path实例上调用方法,而不必关心Path类型是否是interface。只有当读者必须执行它时,才能强调区别。
发布于 2015-02-18 06:08:34
Path是一个接口,因为具体实现依赖于底层文件系统。这些方法都在实现接口的类中,这些类与平台有关.
请注意,您从不使用new构造Path对象,而是使用像Paths.get这样的方法,它返回适当类的实例。
例如,在Oracle的实现中,windows中的路径由sun.nio.fs.WindowsPath (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/sun/nio/fs/WindowsPath.java)实现
https://stackoverflow.com/questions/28576904
复制相似问题