关于继承_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 关于继承

关于继承

 2014/8/18 15:19:49  QuarterLifeForJava  程序员俱乐部  我要评论(0)
  • 摘要:先看下代码:classA:importjava.io.LineNumberReader;importjava.io.Reader;publicclassA{privateLineNumberReaderl;publicA(Readerr)throwsException{l=newLineNumberReader(r);}publicStringclassA_MethodRead()throwsException{System.out.println(1);returnl.readLine();
  • 标签:继承
先看下代码:
class A:
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();
	}
	
}

class B:
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
	}
}

程序先输出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的父类实现,我看到:
    public String readLine() throws IOException {
        return readLine(false);
    }

再点进去,找了半天,看到一个fill()方法,点进去看到这么一段:
do {
	    n = in.read(cb, dst, cb.length - dst);
	} while (n == 0);

额。。总算看到read方法了(int java.io.Reader.read(char[] cbuf, int off, int len) throws IOException)。几经周折总算看到了。。。

这是在解释编译器中的第一步骤,分词器中的一小段样板代码,想请教下大家,类似A a = new A(new B());B继承Readr重写read方法。这种类似的操作大家平时用的多吗?或者说主要这种思路或者方法一般用在哪里合适?
发表评论
用户名: 匿名