是否可以在java中为接口创建对象?

时间:2012-04-16 10:58:12

标签: java interface

在java中,接口只包含方法类型,名称和参数。实际的实现是在实现它的类中完成的。鉴于此,如何创建一个接口实例并将其用作类对象?有许多这样的接口,例如org.w3c.dom.Node

这是我正在使用的代码:

DocumentBuilderFactory fty = DocumentBuilderFactory.newInstance();
fty.setNamespaceAware(true);
DocumentBuilder builder = fty.newDocumentBuilder();
ByteArrayInputStream bais = new ByteArrayInputStream(result.getBytes());
Document xmldoc = builder.parse(bais);
NodeList rm1 = xmldoc.getElementsByTagName("Subject");
Node rm3 = rm1.item(0);

6 个答案:

答案 0 :(得分:7)

您永远不会创建 接口的实例。您可以拥有该接口类型的字段/参数/局部变量,但这很好 - 分配给此类变量的值将始终为null或对接口的某个具体实现的实例的引用。关键是只处理接口的代码不需要关心实现是什么。

一个很好的例子是Collections.shuffle(List) - 我可以提供任何列表实现,它只会使用接口中声明的方法。 实际对象将始终是某个具体实现的实例,但shuffle方法不需要知道或关心。

答案 1 :(得分:2)

有两种方法可以获得可用的接口类。 如果我们有接口:

public interface Vehicle{
    public void drive();
}

首先,正如你所说的那样,有一个实现接口的类:

public class Car implements Vehicle{
    public void drive(){
        System.out.println("Here in my car I feel safest of all);
    }
}
Vehicle car = new Car();
v.drive();

或者你可以创建一个匿名类:

Vehicle v = new Vehicle(){
    public void drive(){
        System.out.println("Hello world");
    }
};
v.drive();

答案 2 :(得分:2)

您不创建接口的实例 - 您创建实现接口的类的实例。您可以根据需要创建任意数量的不同实现,并选择最适合的实现。

在您的代码中,您可以使用需要符合该接口的对象的实现。

答案 3 :(得分:0)

这与

相同
List<String> strings = new ArrayList<String>();

List是一个接口,ArrayList是一个实现类。 这隐藏了实现(类),并且仅提供需求/合同(接口)。这是一种合理的编程方式,因为您可以使用LinkedList交换ArrayList(如果列表中没有很多字符串。

答案 4 :(得分:0)

您不创建接口实例,而是创建实现接口的类的实例。

e.g。

Map<String, String> map = new LinkedHashMap<String, String>();

Map是一个接口,LinkedHashMap是一个实现接口的类。

答案 5 :(得分:0)

接口是一个具有抽象类型的特殊类,因此无法创建自己的实例,因为 具有类型。它有一些方法并保持实现她的类的类型。因此,您只能创建引用变量,它们引用一个对象,并确保该对象的类必须实现该接口。