interface Instrument5 {
// Compile-time constant:
int i = 5; // static & final
// Cannot have method definitions:
void play(); // Automatically public
String what();
void adjust();
}
class Wind5 implements Instrument5 {
public void play() {
System.out.println("Wind5.play()");
}
public String what() { return "Wind5"; }
public void adjust() {}
}
class Percussion5 implements Instrument5 {
public void play() {
System.out.println("Percussion5.play()");
}
public String what() { return "Percussion5"; }
public void adjust() {}
}
class Stringed5 implements Instrument5 {
public void play() {
System.out.println("Stringed5.play()");
}
public String what() { return "Stringed5"; }
public void adjust() {}
}
class Brass5 extends Wind5 {
public void play() {
System.out.println("Brass5.play()");
}
public void adjust() {
System.out.println("Brass5.adjust()");
}
}
class Woodwind5 extends Wind5 {
public void play() {
System.out.println("Woodwind5.play()");
}
public String what() { return "Woodwind5"; }
}
public class Music5 {
// Doesn't care about type, so new types
// added to the system still work right:
static void tune(Instrument5 i) {
// ...
i.play();
}
static void tuneAll(Instrument5[] e) {
for(int i = 0; i < e.length; i++)
tune(e);
}
public static void main(String[] args) {
Instrument5[] orchestra = new Instrument5[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind5();
orchestra[i++] = new Percussion5();
orchestra[i++] = new Stringed5();
orchestra[i++] = new Brass5();
orchestra[i++] = new Woodwind5();
tuneAll(orchestra);
}
} ///:~
代码剩余的部分按相同的方式工作。我们可以自由决定上溯造型到一个名为Instrument5的“普通”类,一个名为Instrument5的“抽象”类,或者一个名为Instrument5的“接口”。所有行为都是相同的。事实上,我们在tune()方法中可以发现没有任何证据显示Instrument5到底是个“普通”类、“抽象”类还是一个“接口”。这是做是故意的:每种方法都使程序员能对对象的创建与使用进行不同的控制。作者: 官文昌 时间: 2012-8-6 11:41
接口是OOP(面向对象编程)里最大的优点之一。这是它区别于面向过程编程的地方。形容一个人的水平可以通过他对接口和抽象类的了解及使用程度来看出。所以从这一点,可以看出接口有多么重要。在真正的大项目中,项目并不是一个人做的。项目负责人(或架构者)为了让整个项目组的彼此在各自的工作岗位上协调工作,会定义大量的接口来,来要求底下的程序员实现。
所以接口的含义是:我写接口,是要告诉你应该做什么,并且告诉他要用到什么。而不是做给自己的。程序员之间彼此调用的,不是类中的具体方法,因为具体的业务类是被封装起来的。接口就是提供外部调用的器具。所以,接口设计的好坏,可以决定项目设计的好坏。
接口的字母意思,和使用方法,很容易理解。但是要真正理解接口的用途,只有通过项目经验的增加。这仿佛只可意会,不可言传的说法一样。做过一两年的项目之后,在自己写程序时,就会不由自主用到接口了。顺带提一下,目前最火爆的J2EE框架-Spring,为了提倡人们使用接口,所有设计都围绕接口来产生。