参考类型和对象类型之间的区别?

时间:2013-11-27 06:07:41

标签: java types interface reference-type object-type

Java文档说:

  

定义新界面时,您将定义新参考   数据类型... []

有些人使用名称“对象类型”来引用用于首先实例化对象实例的类。

因为我们不能使用接口来实例化一个对象,我可以说一个对象永远不会有该接口的类型,但如果它实现了那种接口,你可以使用该接口类的引用来访问该对象?

维基百科说:

  

[] ...数据类型或简单类型是标识其中一个的分类   各种类型的数据,如实值,整数或布尔值   确定该类型的可能值;可以的操作   完成该类型的价值;数据的含义;和方式   可以存储该类型的值。

我没有看到Java中的接口如何确定“该类型的可能值;可以对该类型的值执行的操作;数据的含义;以及可以存储该类型的值的方式“。我的理由是,因为接口没有定义方法可以做什么,所以它们不是数据类型,只有类和基元类型定义数据类型。接口仅定义在使用引用访问时如何使用某种数据类型的对象。

基于此,如果有人说实现接口的对象具有相同类型的接口,我可以回答他/她是错的,因为接口只提供引用类型,对象永远不会具有类型界面?

1 个答案:

答案 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方法将返回的内容以及该方法将接受的参数类型。

我希望这能为你澄清事情。