在 Parrot(鹦鹉)例子中,我们用接口 Flyable 来表示飞行能力,Talkable 表示说话能力,但它们并不包含具体实现。而 Parrot 同时具有这两种能力,所以我们为 Parrot 类同时实现了 Flyable 和 Talkable 这两个接口。同样我们还可以定义一个Swallow(燕子)类,但燕子只有飞行能力,所以我们只需要为 Swallow 实现 Flyable 就行了。因为它们各自的的飞行方法有所不同,所以它们有各自关于飞行的具体实现。
emZ^d/A B<.XowT' 另外,正因为一个类可以同时实现多个接口,使得Java的面向对象特性变得非常灵活。运用这种特性,我们可以实现类似C++语言中多继承那样的特性,甚至更灵活的一些特性。下面我们来讨论一下接口在实际中的应用。
/4 zO @8zp(1. 二、用接口来定义一些全局变量
@V$,H/v: C+{du^c$ 因为接口内的字段都是static和final的,所以我们可以很方便的利用这一点来创建一些常量。例如:
*We.?"X']. - public interface Constants {
- String ROOT = "/root";
- int MAX_COUNT = 200;
- int MIN_COUNT = 100;
- }
?O1:-vpZ 在使用时可以直接用Constants.ROOT这样的形式来引用其中的常量。我们还可以用下面这种方法来创建初始值不确定的常量。
f"XFf@! - public interface RandomColor {
- int red = Math.random() * 255;
- int green = Math.random() * 255;
- int blue = Math.random() * 255;
- }
k<b`v&G 其中red、green和blue的值会在第一次被访问时建立,然后保持不变。
u15-|i{y7 oicett=5 三、用接口来定义基本数据结构
P3[+c4 HVb9YU+ 在设计一套软件系统的初期,我们可以用接口来对一些基本数据元素的特性来进行一些描述,再根据需要进行不同的实现。请大家看看下面这个例子:
h&|wqna L||_Jsu - 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的抽象方法
- }
RG(m:N BoZG^ 在这个例子中,我们定义了一个接口User和一个抽象类UserFactory。然后我们用XML技术实现这两个类。可以看出,我们只需要从用UserFactory的getUserFactory()就可以得到一个UserFactory的实例,而不用去考虑这个实例的具体实现方法。通过UserFactory的这个实例我们还可以直接得到User的实例,也不用去考具体的实现方法。
ibDMhW$n |&