在 Parrot(鹦鹉)例子中,我们用接口 Flyable 来表示飞行能力,Talkable 表示说话能力,但它们并不包含具体实现。而 Parrot 同时具有这两种能力,所以我们为 Parrot 类同时实现了 Flyable 和 Talkable 这两个接口。同样我们还可以定义一个Swallow(燕子)类,但燕子只有飞行能力,所以我们只需要为 Swallow 实现 Flyable 就行了。因为它们各自的的飞行方法有所不同,所以它们有各自关于飞行的具体实现。
gD}lDK6N >KPxksFR8 另外,正因为一个类可以同时实现多个接口,使得Java的面向对象特性变得非常灵活。运用这种特性,我们可以实现类似C++语言中多继承那样的特性,甚至更灵活的一些特性。下面我们来讨论一下接口在实际中的应用。
z TYHwx +ZFw3KEkz 二、用接口来定义一些全局变量
#m
x4pf{ ='!E; 因为接口内的字段都是static和final的,所以我们可以很方便的利用这一点来创建一些常量。例如:
muh[wo - public interface Constants {
- String ROOT = "/root";
- int MAX_COUNT = 200;
- int MIN_COUNT = 100;
- }
MI^@p`s 在使用时可以直接用Constants.ROOT这样的形式来引用其中的常量。我们还可以用下面这种方法来创建初始值不确定的常量。
tB S+?N - public interface RandomColor {
- int red = Math.random() * 255;
- int green = Math.random() * 255;
- int blue = Math.random() * 255;
- }
=E6ND8l@2 其中red、green和blue的值会在第一次被访问时建立,然后保持不变。
]Sj<1tx7f H7{)"P]{f 三、用接口来定义基本数据结构
c`S`.WID X:N`x 在设计一套软件系统的初期,我们可以用接口来对一些基本数据元素的特性来进行一些描述,再根据需要进行不同的实现。请大家看看下面这个例子:
WP*xu-(: /\L-y,>X - public interface User {
- int getAge();
- String getName();
- String getPassword();
- }
- public class XMLUser implements User {
- // 这里用XML技术实现User接口中的方法
- public int getAge() { ... }
- public String getName() { ... }
- public String getPassword() { ... }
- }
- public abstract class UserFactory {
- public static UserFactory getUserFactory() {
- return new XMLUserFactory();
- }
- public User getUser(String name);
- public User getAdmin();
- public User createUser(String name, String password, int age);
- public void addUser(User user);
- public void delUser(User user);
- }
- public class XMLUserFactory extends UserFactory {
- // 这里用XML技术实现的UserFactory的抽象方法
- }
PHQ7 4eFqD; 在这个例子中,我们定义了一个接口User和一个抽象类UserFactory。然后我们用XML技术实现这两个类。可以看出,我们只需要从用UserFactory的getUserFactory()就可以得到一个UserFactory的实例,而不用去考虑这个实例的具体实现方法。通过UserFactory的这个实例我们还可以直接得到User的实例,也不用去考具体的实现方法。
3jSt&+ I+08tXO 如果我们决定用JDBC技术来实现User和UserFactory,我们只需要按上面的形式实现JDBCUser和JDBCUserFactory就行了。然后把UserFactory中的getUserFactory方法修改一下就可以改变了它们的实现方法。而我们已经写好的调用UserFactory和User的部分不需要做任何修改。
pco:]3BF6 5;WESk 这是用接口来定义数据结构的一个简单的例子,在实际应用中还有很多灵活的使用方法,大家需要在学习过程中不断的去体会。
sfD@lW3 Y-yozt 四、理解分布式应用的原理
#mT\B[4h .r ,wc*SF 目前有很多软件项目都使用了分布式的技术。Java 有多种支持分布式应用的技术,早期用的比较多的有 RMI、CORBA 等技术,而现在 EJB 技术更为流行一些。但这些技术不管怎么发展,其实都是以接口为基础的。
N>pTl$\4 2VpKG*!\ 以远程方法调用 RMI(Remote Method Invocation)为例。在编写 RMI 应用时,我们需要做两件最基本的事,首先要定义一个接口,这个接口要继承java.rmi.Remote 接口,这个接口中应该包含你要从远端调用的方法名。接下来就是写一个类来实现这个接口中的方法。例如:
W&g