2

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

如果有任何其他用途,请帮助我理解这一点。

4

5 回答 5

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());

它们还允许对象放入几个不同的盒子中。例如,aBird不仅会飞,而且是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是一个接口,我可以选择 use ArrayList,LinkedList等作为我的实现:

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()));
}
于 2012-06-23T12:46:08.220 回答
3

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

于 2012-06-23T12:33:53.770 回答
3

我想到的另一种情况是标记功能。

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

文档中:

一个类实现了 Cloneable 接口,以向 Object.clone() 方法指示该方法可以合法地对该类的实例进行逐个字段的复制。

在Serializable中可以看到另一个相同用途的示例

于 2012-06-23T12:34:20.690 回答
0

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

在 java 中使用接口的第二个优势与应用程序的设计和性能有关。对于任何应用程序,它都需要“松散耦合”和“高度一致”。这里接口出现了。接口实现类之间的契约,因此设计变得松散耦合。

希望这会有所帮助。

于 2012-06-23T13:05:10.597 回答
0

是的,但我反对“公正”这个词。

请记住,您不仅可以定义抽象方法,还可以定义expectation.

例如,请注意在Map接口中有Map.Entry内部接口。在这里,我们不仅看到了您对 Map 的期望,而且还详细了解了您对 Map 的一些期望Map例如他们的Entries.

尽管您不会在 java API 中找到很多示例,但在实际编程中的许多情况下,接口类中也会有大量的enums 和/或public static finals。这些用于细化和详细说明您可以和不能对此类对象执行的操作。

总而言之,你是对的......在一定程度上...... aninterface只是标准化期望,但一些研究会告诉你标准化期望是一个广泛而深入的主题,值得一些非常复杂interface的 s。

于 2012-06-23T13:33:43.887 回答