thinking in java——接口
2017-09-20 18:54
134 查看
创建抽象类和抽象方法非常有用,因为它们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。 当要实现一个接口时,在接口中被定义的方法必须是public的
java SE5的Scanner类的构造器接受一个Readable接口,创建一个实现了Readerable接口的类,可以使用Scanner作用于它。Readerable接口要求使用read()方法。
public class RandomWords implements Readable { private static Random rand = new Random(47); private static final char[] capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); private static final char[] lowers = "abcdefghijklmnopqrstuvwxyz".toCharArray(); private static final char[] vowels = "aeiou".toCharArray(); private int count; public RandomWords(int count) { this.count = count; } public int read(CharBuffer cb) { if(count-- == 0) return -1; // Indicates end of input cb.append(capitals[rand.nextInt(capitals.length)]); for(int i = 0; i < 4; i++) { cb.append(vowels[rand.nextInt(vowels.length)]); cb.append(lowers[rand.nextInt(lowers.length)]); } cb.append(" "); return 10; // Number of characters appended } public static void main(String[] args) { Scanner s = new Scanner(new RandomWords(10)); while(s.hasNext()) System.out.println(s.next()); } } /* Output: Yazeruyac Fowenucor Goeazimom Raeuuacio Nuoadesiw Hageaikux Ruqicibui Numasetih Kuuuuozog Waqizeyoy *///:~
如果一个类并未使用Readerable接口,可以使用适配器设计模式来进行伪多重继承,生成新类
public class RandomDoubles { private static Random rand = new Random(47); public double next() { return rand.nextDouble(); } public static void main(String[] args) { RandomDoubles rd = new RandomDoubles(); for(int i = 0; i < 7; i ++) System.out.print(rd.next() + " "); } } /* Output: 0.7271157860730044 0.5309454508634242 0.16020656493302599 0.18847866977771732 0.5166020801268457 0.2678662084200585 0.2613610344283964 *///:~
public class AdaptedRandomDoubles extends RandomDoubles implements Readable { private int count; public AdaptedRandomDoubles(int count) { this.count = count; } public int read(CharBuffer cb) { if(count-- == 0) return -1; String result = Double.toString(next()) + " "; cb.append(result); return result.length(); } public static void main(String[] args) { Scanner s = new Scanner(new AdaptedRandomDoubles(7)); while(s.hasNextDouble()) System.out.print(s.nextDouble() + " "); } } /* Output: 0.7271157860730044 0.5309454508634242 0.16020656493302599 0.18847866977771732 0.5166020801268457 0.2678662084200585 0.2613610344283964 *///:~
接口中的域是static final的,可以被非常量表达式初始化
相关文章推荐
- Thinking in Java之接口回调
- Thinking in Java:第九章-接口
- Thinking in Java之List接口、ArrayList类源码学习
- Thinking in Java之List接口、ArrayList类源码学习
- thinking in java 学习笔记(一) 接口于多重继承
- 读thinking in java笔记(八):接口
- 09 我读Thinking in java 接口
- [Thinking in JAVA] 接口的水也不浅
- Thinking in Java之接口回调改版
- [Thinking in JAVA] 接口和内部类
- Thinking in JAVA笔记——第九章 接口
- 【Thinking in Java笔记】选择类还是接口
- Thinking in Java 4th - 第9章 接口
- thinking in java 笔记 思维导图 第九章 接口
- Thinking in Java之接口回调改版
- 接口实现Thinking in Java之集合框架浅析
- Thinking in Java--第九章-接口
- Thinking in Java之接口回调改版
- Thinking in Java之Set接口、HashSet源码学习
- thinking in java 笔记--类内的嵌套接口及实例 nested interface(2007.10.11)