没有抽象方法的抽象类,存在什么样的意义呢?
来源:互联网 发布:java基础数据类型 编辑:程序博客网 时间:2024/06/05 16:41
都知道抽象类可以没有抽象方法,这时的抽象类和普通类的最大差别就是不能实例化.一直没找到在什么环境下用到这种特殊的抽象类.最近看了jdk的I/O包后,发现里面有个很好的例子,就是FilterReader类.以下是FilterReader的代码:
public abstract class FilterReader extends Reader ...{ /** *//** * The underlying character-input stream. */ protected Reader in; /** *//** * Create a new filtered reader. * * @param in a Reader object providing the underlying stream. * @throws NullPointerException if <code>in</code> is <code>null</code> */ protected FilterReader(Reader in) ...{ super(in); this.in = in; } /** *//** * Read a single character. * * @exception IOException If an I/O error occurs */ public int read() throws IOException ...{ return in.read(); } /** *//** * Read characters into a portion of an array. * * @exception IOException If an I/O error occurs */ public int read(char cbuf[], int off, int len) throws IOException ...{ return in.read(cbuf, off, len); } /** *//** * Skip characters. * * @exception IOException If an I/O error occurs */ public long skip(long n) throws IOException ...{ return in.skip(n); } /** *//** * Tell whether this stream is ready to be read. * * @exception IOException If an I/O error occurs */ public boolean ready() throws IOException ...{ return in.ready(); } /** *//** * Tell whether this stream supports the mark() operation. */ public boolean markSupported() ...{ return in.markSupported(); } /** *//** * Mark the present position in the stream. * * @exception IOException If an I/O error occurs */ public void mark(int readAheadLimit) throws IOException ...{ in.mark(readAheadLimit); } /** *//** * Reset the stream. * * @exception IOException If an I/O error occurs */ public void reset() throws IOException ...{ in.reset(); } /** *//** * Close the stream. * * @exception IOException If an I/O error occurs */ public void close() throws IOException ...{ in.close(); }}
可以看到FilterReader就是一个没有抽象方法的抽象类,里面的每个方法都是调用构造函数传入的Reader对象的方法.这种抽象类你不能实例化它,因为实例化它没意义,它还没实现任何Filter的功能.在extends具体子类时实现Filter功能,实例化相应的子类才有实际意义.
我们可以写FilterReader的一个具体子类如下:
/** * FilterReader是一个抽象类,不能实例化该类,FilterReader类的每个方法都是实现的, * 里面调用的都是FilterReader(Reader in)的传入参数in的方法. */public class UppercaseConvertor extends FilterReader...{ // 构造方法由FilterReader的protected上升到public的 public UppercaseConvertor(Reader in) ...{ super(in); } @Override public int read() throws IOException...{ int c = super.read(); return (-1==c?c:Character.toUpperCase((char)c)); } @Override public int read(char[] buf,int offset, int count) throws IOException...{ int nread = super.read(buf, offset, count); int last = offset + nread; for(int i=0;i<last;i++) buf[i] = Character.toUpperCase(buf[i]); return nread; } public static void main(String[] args) throws IOException ...{ UppercaseConvertor uc = new UppercaseConvertor(new FileReader("d:\log.txt")); BufferedReader br = new BufferedReader(uc); String r; while(null!=(r=br.readLine()))...{ System.out.println(r); } }}
- 没有抽象方法的抽象类,存在什么样的意义呢?
- 抽象类的意义
- Java中没有抽象方法的抽象类
- 抽象类没有抽象方法
- 抽象的意义
- 抽象的意义
- 抽象的意义
- 抽象类--〉〉〉〉为什么要有抽象类,他存在的意义是什么?? 各位指点..
- 类、对象、抽象类、接口和内部类存在的意义
- 接口和抽象类存在的意义和适用场景以及为什么要使用接口
- 面向对象,类的组合关系,继承,实现,方法重写,方法重载,this的使用,抽象方法和抽象类的比较,父类构造方法存在的意义,多态的是用和解析,各种访问修饰符
- 抽象类实现接口的意义
- C#的抽象类和抽象方法
- 抽象类没抽象方法的例子
- Java的抽象类与抽象方法
- java的抽象类和抽象方法
- 抽象类没抽象方法的例子
- Java的抽象类和抽象方法
- rhel5.5 x86_64 sytem-cofig-kickstart不能自定义安装包
- 浏览网页时,没有来得及看的文章
- Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
- VMware下Ubuntu与宿主机XP共享文件
- 2012QQ自-动-灌-水-机...
- 没有抽象方法的抽象类,存在什么样的意义呢?
- 2011.11.10_33vc_VMP 2.06 antidump的处理
- Delphi数学运算函数
- 关于在线编辑器的学习
- 一口气解决java通信中的中文乱码问题
- SharpICTCLAS1.1版
- 关于旅游论坛市场需求的前期调研
- handler和message传值两例
- 空指针异常