浏览 897 次
锁定老帖子 主题:关于继承
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-08-18
class A: <pre name="code" class="java"> import java.io.LineNumberReader; import java.io.Reader; public class A{ private LineNumberReader l; public A(Reader r) throws Exception{ l = new LineNumberReader(r); } public String classA_MethodRead() throws Exception{ System.out.println(1); return l.readLine(); } //new InputStreamReader(new FileInputStream(new File("D://abc.txt"))) public static void main(String[] args) throws Exception{ A a = new A(new B()); a.classA_MethodRead(); } } </pre> class B: <pre name="code" class="java"> import java.io.IOException; import java.io.Reader; public class B extends Reader{ @Override public int read(char[] cbuf, int off, int len) throws IOException { System.out.println(2); return 0; } @Override public void close() throws IOException { // TODO Auto-generated method stub } } </pre> 程序先输出1然后输出2,输出1没问题,因为它调了classA_MethodRead()方法,但是输出2我一开始就有些不大理解,我是重写了Readr中的read(char[] cbuf, int off, int len)方法,而我classA_MethodRead()方法中并未调用read(char[] cbuf, int off, int len)方法啊!只调用了readLine()方法,那么只有一种情况——readLine()方法中调用了read方法,进入readLine的父类实现,我看到: <pre name="code" class="java"> public String readLine() throws IOException { return readLine(false); } </pre> 再点进去,找了半天,看到一个fill()方法,点进去看到这么一段: <pre name="code" class="java"> do { n = in.read(cb, dst, cb.length - dst); } while (n == 0); </pre> 额。。总算看到read方法了(int java.io.Reader.read(char[] cbuf, int off, int len) throws IOException)。几经周折总算看到了。。。 这是在解释编译器中的第一步骤,分词器中的一小段样板代码,想请教下大家,类似A a = new A(new B());B继承Readr重写read方法。这种类似的操作大家平时用的多吗?或者说主要这种思路或者方法一般用在哪里合适? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |