论坛首页 编程语言技术论坛

关于继承

浏览 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方法。这种类似的操作大家平时用的多吗?或者说主要这种思路或者方法一般用在哪里合适?
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics