Java文档说:
定义新界面时,您将定义新参考 数据类型... []
有些人使用名称“对象类型”来引用用于首先实例化对象实例的类。
因为我们不能使用接口来实例化一个对象,我可以说一个对象永远不会有该接口的类型,但如果它实现了那种接口,你可以使用该接口类的引用来访问该对象?
维基百科说:
[] ...数据类型或简单类型是标识其中一个的分类 各种类型的数据,如实值,整数或布尔值 确定该类型的可能值;可以的操作 完成该类型的价值;数据的含义;和方式 可以存储该类型的值。
我没有看到Java中的接口如何确定“该类型的可能值;可以对该类型的值执行的操作;数据的含义;以及可以存储该类型的值的方式“。我的理由是,因为接口没有定义方法可以做什么,所以它们不是数据类型,只有类和基元类型定义数据类型。接口仅定义在使用引用访问时如何使用某种数据类型的对象。
基于此,如果有人说实现接口的对象具有相同类型的接口,我可以回答他/她是错的,因为接口只提供引用类型,对象永远不会具有类型界面?
答案 0 :(得分:2)
你说“实现接口的对象具有相同类型的接口”是正确的。并且由于对象是类的实例,因此技术上从不具有与接口相同的类型,因为接口无法在Java中实例化。接口可以被视为类的蓝图。
我能想到的最常见的一个实现是Java Collections。
Map<Integer, String> mapExample = new HashMap<Integer, String>();
这里的对象类型是HashMap和参考类型的Map(接口)。 HashMap将继承Map中声明的方法,并提供它们自己的实现。
我没有看到Java中的接口如何确定“该类型的可能值;可以对该类型的值执行的操作;数据的含义;以及可以存储该类型的值的方式“。我的理由是,因为接口没有定义方法可以做什么,所以它们不是数据类型,只有类和基元类型定义数据类型。
让我们通过以下示例解决这个问题:
public interface IHelloWorld {
public String helloWorld(String world);
}
这里我有一个包含helloWorld方法的接口。我已将访问者类型定义为public
,我已确保它将返回类型String
并且它将采用String
参数。所以它肯定可以定义方法可以做什么。任何实现此接口的类都需要提供helloWorld的实现细节。如果我要实现这一点,我会做以下事情:
public class HelloWorld implements IHelloWorld {
public String helloWorld(String world) {
return "Hello " + world;
}
}
你可以在这里看到虽然我们在IHelloWorld
接口中没有实现细节,但我们定义了helloWorld方法将返回的内容以及该方法将接受的参数类型。
我希望这能为你澄清事情。