在 Parrot(鹦鹉)例子中,我们用接口 Flyable 来表示飞行能力,Talkable 表示说话能力,但它们并不包含具体实现。而 Parrot 同时具有这两种能力,所以我们为 Parrot 类同时实现了 Flyable 和 Talkable 这两个接口。同样我们还可以定义一个Swallow(燕子)类,但燕子只有飞行能力,所以我们只需要为 Swallow 实现 Flyable 就行了。因为它们各自的的飞行方法有所不同,所以它们有各自关于飞行的具体实现。
3'?h;`v\Lo HiQoRk 另外,正因为一个类可以同时实现多个接口,使得Java的面向对象特性变得非常灵活。运用这种特性,我们可以实现类似C++语言中多继承那样的特性,甚至更灵活的一些特性。下面我们来讨论一下接口在实际中的应用。
NvQY7C HXD*zv@ *6 二、用接口来定义一些全局变量
#citwMW l,imT$u 因为接口内的字段都是static和final的,所以我们可以很方便的利用这一点来创建一些常量。例如:
#]5&mKi - public interface Constants {
- String ROOT = "/root";
- int MAX_COUNT = 200;
- int MIN_COUNT = 100;
- }
y%{*uH}SL 在使用时可以直接用Constants.ROOT这样的形式来引用其中的常量。我们还可以用下面这种方法来创建初始值不确定的常量。
qk_p}l-F1 - public interface RandomColor {
- int red = Math.random() * 255;
- int green = Math.random() * 255;
- int blue = Math.random() * 255;
- }
%GVEY 其中red、green和blue的值会在第一次被访问时建立,然后保持不变。
+^/Nil [$hptQv 三、用接口来定义基本数据结构
~a|^?7@p #)W8. 在设计一套软件系统的初期,我们可以用接口来对一些基本数据元素的特性来进行一些描述,再根据需要进行不同的实现。请大家看看下面这个例子:
?)Tz'9l ?l)}E - 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的抽象方法
- }
C1ZFA![ 7xLo4 在这个例子中,我们定义了一个接口User和一个抽象类UserFactory。然后我们用XML技术实现这两个类。可以看出,我们只需要从用UserFactory的getUserFactory()就可以得到一个UserFactory的实例,而不用去考虑这个实例的具体实现方法。通过UserFactory的这个实例我们还可以直接得到User的实例,也不用去考具体的实现方法。
}9L 40)8 w/lXZg 如果我们决定用JDBC技术来实现User和UserFactory,我们只需要按上面的形式实现JDBCUser和JDBCUserFactory就行了。然后把UserFactory中的getUserFactory方法修改一下就可以改变了它们的实现方法。而我们已经写好的调用UserFactory和User的部分不需要做任何修改。
p_rN1W
Dd'
7yMieUF 这是用接口来定义数据结构的一个简单的例子,在实际应用中还有很多灵活的使用方法,大家需要在学习过程中不断的去体会。
%Nwyx;>9^K )![f\!'PI 四、理解分布式应用的原理
o 8~f I
ybl;u 目前有很多软件项目都使用了分布式的技术。Java 有多种支持分布式应用的技术,早期用的比较多的有 RMI、CORBA 等技术,而现在 EJB 技术更为流行一些。但这些技术不管怎么发展,其实都是以接口为基础的。
&