在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);
答案 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)
接口是一个具有抽象类型的特殊类,因此无法创建自己的实例,因为 不 具有类型。它有一些方法并保持实现她的类的类型。因此,您只能创建引用变量,它们引用一个对象,并确保该对象的类必须实现该接口。