如何运用接口中的变量?接口可以扩展吗?
你可以使用接口来引入多个类的共享常量,这样做只需要简单的声明包含变量初始化想要的值的接口就可以了。
如果你的一个类中包含那个接口(就是说当你实现了接口时),所有的这些变量名都将作为常量看待。这与在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编写的实际的程序和小应用程序都被包含在包中。一个数字也可能实现接口。因此,游刃有余的运用这些工具是非常有用的。
如何运用接口中的变量?接口可以扩展吗?相关推荐
- 接口中定义变量必须为public static final的原因
接口中定义变量必须为public static final的原因 在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param= ...
- 接口中的变量为什么不能是普通变量,只能是static final
接口中的变量为什么不能是普通变量,只能是public static final 我个人觉得编程是一种非常需要逻辑性的工作,当然有些东西能够靠死记硬背,但是只能是止于表象,理解其内部的逻辑和思想才是关键 ...
- 接口中成员变量和成员函数介绍
接口类型的定义类似于类的定义. 接口定义的形式如下: [修饰符] interface 接口名 [extends] [接口列表] { 接口体 } 像类那样,编译好的接口被保存在class 文件中. 1. ...
- 接口中的变量public static final
接口中的属性必须是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性. 接口必须要具体类实现才有意义,所以必须是public 接口中的数据对所有实现类只有一份,所以是static (否则一 ...
- 电网视频监控系统国网B接口中注册的接口流程GB281181国标流媒体服务平台
国网B接口电网B接口 1.电网视频监控系统 2.电网B接口 协议(部分) 2.1.注册的接口流程 3.搭建GB28181视频直播平台 4.电网B接口设备如何接入 1.电网视频监控系统 电网视频监控系统 ...
- 接口中定义的成员变量是( )。_抽象与接口
原文链接:抽象与接口 抽象类 抽象类的定义 Java可以创建一种类专门用来当作父类,这种类称为"抽象类".抽象类的作用有点类似"模板",其目的是要设计者依据它的 ...
- Java接口中的成员变量为什么必须是static ?
接口的含义 接口就是提供一种统一的协议, 而接口中的属性也属于协议中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final ...
- Java中接口定义成员变量
在interface里面的变量都是public static final的.可以这样写:public static final int i=10或者int i=10. public interface ...
- Java接口中的成员变量为什么必须声明为public static final?
我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点, 而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而 ...
最新文章
- Python 2.x 与 Python 3.x 的区别
- 没有学过功夫能否练神功
- WebSocket小叙
- unity 镜面反射_Unity | Diffuse Light漫反射光照
- File Operation
- 购物车及商品php代码_简单的php购物车代码
- 再见 Python!Yann LeCun 警告:深度学习需要新编程语言
- 接口测试工具——postman
- WPF太阳、地球、月球运动轨迹模拟
- 机器人学导论原书第三版
- mysql导出单表数据_MySQL之导出整个及单个表数据的操作
- i5 1135G7和 i7 10875H哪个好
- ggplot2 画图 X 轴排序问题
- 敏捷 绩效_管理敏捷团队绩效的四个技巧
- 阿里妈妈返利比率的商品搜索API接口
- Bonobo.Git.Server 401 Error
- 建设工程法规专科【5】
- Linux设定密码策略
- java解析soap返回报文_java解析soap响应报文
- 用计算机数字弹侧脸,侧脸钢琴简谱-数字双手-于果
热门文章
- TP收集一些可以用的资源
- AJAX通过HTML请求C#一般处理程序
- MYSQL—— 启动MYSQL 57 报错“The service MYSQL57 failed the most recent........等”的问题解决方式!...
- MySQL的UNIQUE KEY对数据中字母的大小写不敏感
- 流式计算storm应用场景简介
- .NET开源 Visual Studio支持Android和iOS 编程
- bad interpreter: No such file or directory解决
- [转]WINDOW进程通信的几种方式
- Labview生成三维曲面 | 花瓶
- visual studio 2012 下配置OPENcv3.1 和CMAKE问题总结