Java SE 是什么,包括哪些内容(十九)?
本文内容参考自Java8标准
再次感谢Java编程思想对本文的启发!
接口最吸引人的原因之一就是允许同一个接口具有多个不同的实现(就是每个实现接口的类都可以给这个接口的所有方法以不同的实现,而不用去修改主体框架的代码),在简单的情况中,它的体现形式通常是只规定一个接受接口类型的方法(public void f(xxx接口类型 s)),而该接口的实现和向该方法传递的实际对象类型则取决于方法的使用者。
因此,接口的一种常见用法就是"策略模式",此时你编写一个执行某些操作的方法,而该方法将接受一个同样是你指定的接口类型,其实,你这就是声明了:“你可以用任何你想要的对象来调用我的方法,只要你实现我规定的接口类型”,这使得你的方法更加灵活、通用、并更具可复用性。
举例:
Java SE5的类Scanner的构造方法接受的就是一个Readable接口,你会发现Readable接口没有用作Java标准类库中其他任何方法的参数,它是单独为类Scanner创建的,以使得类Scanner不必将其形式参数限制为某个特定的类。通过这种方式,Scanner可以作用于更多的类型。如果你创建了一个新的类,并且想让Scanner可以作用于它,那么你就应该让这个类实现接口Readable。
源码截图示例(Scanner构造方法中接受接口Readable类型的参数):
构造方法一:
构造方法二:
Java API文档截图:
Readable代表的是指定的源,假设你有一个类,代表了文件或者是字符串或者其他的源等等,你就可以让这个类实现接口Readable,然后类Scanner就能作用你这个源,你就可以使用它提供了多种方法。
代码示例:
// 适配接口
//类RandomWords实现接口Readable
public class RandomWords implements Readable{
//创建随机类Random的对象
private static Random rand = new Random(43);
//static final的char数组类型capitals
//方法toCharArray()是类String的方法
//作用是将字符串转换为字符数组
//这里将字符串"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
//转换为了字符数组
private static final char[] capitals =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
//同上
private static final char[] lowers =
"abcdefghijklmnopqrstuvwxyz".toCharArray();
//同上
private static final char[] vowels =
"aeiou".toCharArray()