你可以使用接口来引入多个类的共享常量,这样做只需要简单的声明包含变量初始化想要的值的接口就可以了。

如果你的一个类中包含那个接口(就是说当你实现了接口时),所有的这些变量名都将作为常量看待。这与在C/C++中用头文件来创建大量的 #defined 常量或const 声明相似。如果接口不包含方法,那么任何包含这样接口的类实际并不实现什么。

这就像类在类名字空间引入这些常量作final变量。下面的例子运用了这种技术来实现一个自动的“作决策者”:

import java.util.Random;
interface SharedConstants { int NO = 0; int YES = 1; int MAYBE = 2; int LATER = 3; int SOON = 4; int NEVER = 5;
}
class Question implements SharedConstants { Random rand = new Random(); int ask() { int prob = (int) (100 * rand.nextDouble()); if (prob < 30) return NO; // 30% else if (prob < 60) return YES; // 30% else if (prob < 75) return LATER; // 15% else if (prob < 98) return SOON; // 13% else return NEVER; // 2% }
}
class AskMe implements SharedConstants { static void answer(int result) { switch(result) { case NO: System.out.println("No"); break; case YES: System.out.println("Yes"); break; case MAYBE: System.out.println("Maybe"); break; case LATER: System.out.println("Later"); break; case SOON: System.out.println("Soon"); break; case NEVER: System.out.println("Never"); break; } } public static void main(String args[]) { Question q = new Question(); answer(q.ask()); answer(q.ask()); answer(q.ask()); answer(q.ask()); }
}

注意该程序利用了Java的一个标准类:Random,该类提供伪随机数。它包含若干个方法。通过这些方法你可以获得你程序所需形式的随机数。该例中,用到了nextDouble( )方法。它返回0.0到1.0之间的随机数。

该例子程序中,定义了两个类Question和AskMe。这两个类都实现了SharedConstants接口。

该接口中定义了NO、YES、MAYBE、SOON、LATER和NEVER。每个类中,代码就像自己定义或继承了它们一样直接引用了这些变量。下面是该程序的输出示例。注意每次运行结果不同。

Later
Soon
No
Yes

接口可以通过运用关键字extends被其他接口继承。语法与继承类是一样的。当一个类实现一个继承了另一个接口的接口时,它必须实现接口继承链表中定义的所有方法。下面是一个例子:

// One interface can extend another.
interface A { void meth1(); void meth2();
}
// B now includes meth1() and meth2() -- it adds meth3().
interface B extends A { void meth3();
}
// This class must implement all of A and B
class MyClass implements B { public void meth1() { System.out.println("Implement meth1()."); } public void meth2() { System.out.println("Implement meth2()."); } public void meth3() { System.out.println("Implement meth3()."); }
}
class IFExtend { public static void main(String arg[]) { MyClass ob = new MyClass(); ob.meth1(); ob.meth2(); ob.meth3(); }
}

作为一个实验你也许希望移走MyClass中meth1( )的实现。这将导致编译时错误。前面讲过,任何实现接口的类必须实现该接口定义的所有方法,包括从其他接口继承的任何方法。

尽管我们在本书中包括的例子没有很频繁的用到包和接口,这两个工具是Java编程环境中的重要部分。

实质上所有用Java编写的实际的程序和小应用程序都被包含在包中。一个数字也可能实现接口。因此,游刃有余的运用这些工具是非常有用的。

如何运用接口中的变量?接口可以扩展吗?相关推荐

  1. 接口中定义变量必须为public static final的原因

    接口中定义变量必须为public static final的原因 在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param= ...

  2. 接口中的变量为什么不能是普通变量,只能是static final

    接口中的变量为什么不能是普通变量,只能是public static final 我个人觉得编程是一种非常需要逻辑性的工作,当然有些东西能够靠死记硬背,但是只能是止于表象,理解其内部的逻辑和思想才是关键 ...

  3. 接口中成员变量和成员函数介绍

    接口类型的定义类似于类的定义. 接口定义的形式如下: [修饰符] interface 接口名 [extends] [接口列表] { 接口体 } 像类那样,编译好的接口被保存在class 文件中. 1. ...

  4. 接口中的变量public static final

    接口中的属性必须是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性. 接口必须要具体类实现才有意义,所以必须是public 接口中的数据对所有实现类只有一份,所以是static (否则一 ...

  5. 电网视频监控系统国网B接口中注册的接口流程GB281181国标流媒体服务平台

    国网B接口电网B接口 1.电网视频监控系统 2.电网B接口 协议(部分) 2.1.注册的接口流程 3.搭建GB28181视频直播平台 4.电网B接口设备如何接入 1.电网视频监控系统 电网视频监控系统 ...

  6. 接口中定义的成员变量是( )。_抽象与接口

    原文链接:抽象与接口 抽象类 抽象类的定义 Java可以创建一种类专门用来当作父类,这种类称为"抽象类".抽象类的作用有点类似"模板",其目的是要设计者依据它的 ...

  7. Java接口中的成员变量为什么必须是static ?

    接口的含义 接口就是提供一种统一的协议, 而接口中的属性也属于协议中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final ...

  8. Java中接口定义成员变量

    在interface里面的变量都是public static final的.可以这样写:public static final int i=10或者int i=10. public interface ...

  9. Java接口中的成员变量为什么必须声明为public static final?

    我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点, 而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而 ...

最新文章

  1. Python 2.x 与 Python 3.x 的区别
  2. 没有学过功夫能否练神功
  3. WebSocket小叙
  4. unity 镜面反射_Unity | Diffuse Light漫反射光照
  5. File Operation
  6. 购物车及商品php代码_简单的php购物车代码
  7. 再见 Python!Yann LeCun 警告:深度学习需要新编程语言
  8. 接口测试工具——postman
  9. WPF太阳、地球、月球运动轨迹模拟
  10. 机器人学导论原书第三版
  11. mysql导出单表数据_MySQL之导出整个及单个表数据的操作
  12. i5 1135G7和 i7 10875H哪个好
  13. ggplot2 画图 X 轴排序问题
  14. 敏捷 绩效_管理敏捷团队绩效的四个技巧
  15. 阿里妈妈返利比率的商品搜索API接口
  16. Bonobo.Git.Server 401 Error
  17. 建设工程法规专科【5】
  18. Linux设定密码策略
  19. java解析soap返回报文_java解析soap响应报文
  20. 用计算机数字弹侧脸,侧脸钢琴简谱-数字双手-于果

热门文章

  1. TP收集一些可以用的资源
  2. AJAX通过HTML请求C#一般处理程序
  3. MYSQL—— 启动MYSQL 57 报错“The service MYSQL57 failed the most recent........等”的问题解决方式!...
  4. MySQL的UNIQUE KEY对数据中字母的大小写不敏感
  5. 流式计算storm应用场景简介
  6. .NET开源 Visual Studio支持Android和iOS 编程
  7. bad interpreter: No such file or directory解决
  8. [转]WINDOW进程通信的几种方式
  9. Labview生成三维曲面 | 花瓶
  10. visual studio 2012 下配置OPENcv3.1 和CMAKE问题总结