接口 (Java)

概观

接口被用来统一类的共通行为，当不同的类需要进行信息共享时，是不需要特别去创建类间的关系。举例来说，一个人（Human）及一只鹦鹉（Parrot）都会吹口哨（whistle），然而Human及Parrot不应该为Whistler的子类，最好的做法是令他们为Animal的子类，而他们可以使用Whistler的接口进行沟通。
还有一种接口的使用方法，则是当一个对象有实现特定接口时，我们使用它是不需要知道它的类，例如，一个事物因为口哨的噪音影响到其他人，对于其他人而言，就不需要知道噪音来源是来自人还是鹦鹉，因为他们可以确定，一个会吹口哨的事物正在吹口哨。举一个更实际的例子，排序算法可能会期待对象的类型是可以被比較的，于是它只需要知道对象的类型可以被以某种方式进行排序即可，这与对象的类型无关。whistler.whistle()将会调用对象的实现方法whistle，而不需要知道对象是以哪个类来实现Whistler。
例如：
  interface Bounceable {
      void setBounce();  // 注意分號
                         // 介面的方法（method）是公開（public）、抽象（abstract）、永遠不會是最尾端的型別（final）
                         // 把它們想成只是個模型，所以沒有任何方法有被實現
  }

接口的宣告

下列的语法为接口的宣告方式：
[存取修飾] interface 介面名稱 [extends 其他的介面] {
        常數宣告
        抽象方法宣告
}
接口的主体包含着抽象方法，但所有方法在接口内（定义上）都是抽象（Abstract）方法，所以abstract的关键字在接口内则不被需要。由于接口代表着一个对外行为的集合，所以任何方法在接口内都是public(公开的)。
所以，一个简单的接口可以这么写
public interface Predator {
       boolean chasePrey(Prey p);
       void eatPrey(Prey p);}
接口内的成员皆为静态（static）、final及公开（public），反之，他们可以成为任何类或接口的类型
实现一个接口的语法，可以使用这个公式：
... implements 介面名稱[, 其他介面, 其他的..., ...] ...
类可以用来实现接口，举例来说
public class Lion implements Predator {

        public boolean chasePrey(Prey p) {
               // programming to chase prey p (specifically for a lion)
        }

        public void eatPrey (Prey p) {
               // programming to eat prey p (specifically for a lion)
        }}
如果一个类实现了一个接口，而没有实现接口的所有方法，则它必须被标注为abstract(抽象类)。一个抽象类的子类必须实现它未完成的方法，假如该项子类仍不会实现接口的所有方法，那么该项子类依然需要被标注为abstract。
类可以同时实现多项接口
 public class Frog implements Predator, Prey { ... }
接口通常被使用在Java编程语言，用来做回调函数使用 。Java并不允许方法作为参数传递使用，因此，其中一个解决办法则是可以定义一个接口，把这个接口当成方法的参数，以此来使用该项对象的方法签名。

子接口

接口可以被延伸为数个不同的接口，可以使用上述所描述的方法，举例来说：
 public interface VenomousPredator extends Predator, Venomous {
         //介面主體
 }
以上的程序片段是合法定义的子接口，与类不同的是，接口允许多重继承，而Predator 及 Venomous 可能定义或是继承相同的方法，比如说kill(Prey prey)，当一个类实现VenomousPredator的时候，它将同时实现这两种方法。