InputStream is an Abstract class.Then how are we able to access System.in.And moreover int read() is an abstract method in InputStream class.Then how are we able to access System.in.read() method if read() is an abstract method.
int a=System.in.read(); System.out.println((char)a);
is System.in an object reference of InputStream class?
yes!, it is declared/documented in the System class:/** * The "standard" input stream. This stream is already * open and ready to supply input data. Typically this stream * corresponds to keyboard input or another input source specified by * the host environment or user. */ public final static InputStream in = null;
but at runtime is a reference to a BufferedInputStream class
so ou are not instantiating an abstract class
I suggest you to read more about abstraction and inheritance methods in Java.
If you extend an abstract class, you have to implement its abstract methods. This way, you provide an implementation for it, which can be called by consumers.
System.in is an instance of a class which extends InputStream, not of InputStream directly.