除了标准化期望之外,是否有任何使用接口(在Java中)?

时间:2012-06-23 12:30:53

标签: java interface

我是java和学习界面的新手。除了标准化期望之外,我不理解接口的使用。

如果还有其他用途,请帮助我理解。

5 个答案:

答案 0 :(得分:5)

接口有一些很好的用途:

多态性

它们允许您以相同的方式处理几个不同但相似的对象。例如:

public interface Flyer {
  public void fly();
}   

public class Bird implements Flyer {
  @Override
  public void fly() {
    System.out.println("I'm flying");
  }   
}   

public class Airplane implements Flyer {
  @Override
  public void fly() {
    System.out.println("I'm inanimate and flying");
  }   
}   

// then you can have a method like so:
public void makeFly(Flyer flyer) {
  flyer.fly();
} 

// or make a list like so:
List<Flyer> fliers = Arrays.asList(new Airplane(), new Bird());

它们还允许对象适合几个不同的框。例如,Bird不仅苍蝇,而且还是Animal。接口允许您将Bird视为一个:

public interface Animal {
  public void move();
}

public class Bird implements Flyer, Animal {
  @Override
  public void fly() {
    System.out.println("I'm flying");
  }   

  @Override
  public void move() {
    fly();
  }
}

// now I can do:
Bird bird = new Bird();
Flyer flyer = new Bird();
Animal animal = new Bird();

解耦设计

此外,它们还可让您灵活选择实施方案。 (我不确定“标准化期望”是什么意思,但这种用法可能大多数与标准化有关。即这是,因为它创建了一个标准。)例如,假设我有一个返回List<Flyer>的方法。由于List是一个界面,我可以选择使用ArrayListLinkedList等作为我的实现:

public List<Flyer> makeFlyerList() {
  return new ArrayList<Flyer>(Arrays.asList(new Airplane(), new Bird()));
}

// works just the same
public List<Flyer> makeFlyerList() {
  return new LinkedList<Flyer>(Arrays.asList(new Airplane(), new Bird()));
}

答案 1 :(得分:3)

接口是一种声明实现类的合同的方法;它是在消费者和生产者之间创建抽象解耦设计的主要工具。

答案 2 :(得分:3)

我想到的另一个案例是标记功能。

例如,

java.lang.Cloneable没有任何方法声明,它仅用于标记实现为可克隆类的类。

来自documentation

  

一个类实现Cloneable接口以指示   Object.clone()方法,该方法的合法性   该类实例的field-for-field副本。

Serializable

中可以看到另一个相同用途的样本

答案 3 :(得分:0)

Java在继承(即多重继承)中具有设计限制。 所以你不能扩展多个类,但你可以实现任意数量的接口。

在java中使用接口的第二个优点与应用程序的设计和性能有关。对于任何应用,它都需要“松散耦合”和“高度连贯”。 接口进入图片。接口实现类之间的契约,因此设计变得松散耦合。

希望这会有所帮助。

答案 4 :(得分:0)

是的,但我会反对'只是'这个词。

请记住,您不仅可以定义抽象方法,还可以定义expectation附带的各种其他行李。

例如,请注意Map界面中有Map.Entry内部接口。在这里,我们不仅可以看到您可以期待的地图,还可以看到有关您可以预期的一些事项的详细信息来自 a Map,例如他们的Entries

虽然你在java API中找不到很多例子,但在实际编程中有很多例子,你在接口类中会有大量的enum和/或public static final s太。这些用于细化和细化,几乎达到过高的水平,你可以做什么和不能对这种类型的对象做什么。

总而言之,你是正确的......在某种程度上... interface只是标准化期望但是一点研究将告诉你标准化期望是一个广泛而深刻的主题,值得一些非常复杂的interface s。