Más Conceptos y Herramientas en Java
Reuso de clases:
    Composición Car.java

Polimorfismo
   Shapes.java

Estructura dinámicas para el almacenamiento de objetos: "Collection Classes"
    Vectores: CatsAndDogs.java  Versión corregida
    Stack: implementa una secuencia LIFO: Clase estándar Stack  Stacks.java
    Tablas Hash:  Clase estándar HashMap  Statistics.java

Sistema de I/O en Java
    Se proveen clases para  I/O orientada al byte e I/O orientada al caracter. 

    El manejo de entrada y Salida en java es un tanto más sofisticado que en C u otros lenguajes tradicionales.
En Java se han desarrollado una seria de clases que trabajan en forma colaborativa para cubrir las necesidades múltiples de entrada y salida de datos.
En general estas clases trabajan en forma concatenada. Se observan secuencias de llamados donde la clase exterior hace uso de los llamados de la clase siguiente para llevar a cabo su tarea y así sucesivamente.

Por ejemplo: Para manejos de archivos, tenemos las clases FileInputStream y FileOutputStream que básicamente permiten la lectura y escritura de byte en algún archivo del sistema de archivos de la máquina.
Como estas operacioes son tan básicas, hay otra clase que basada sólo en la lectura y escritura de bytes puede ofrecer servicios (métodos) más interesantes para la aplicación. Aquí tenemos a las clases: InputStreamReader y OutputStreamWriter; estas clases hacen la transformación de bytes a caracteres en lectura y de caracteres a bytes para escritura respectivamente.

Entonces: para escritura de caracteres podemos usar la secuencia:  

InputStreamreader --->
"Subclases de InputStream"

FileInputStream  -->
"Archivo"
ByteArrayaInputStream  -->
"Arreglo de carracteres"
StringBufferInputStream  -->
"String"
AudioInputStream
.......

Ver paquete java.io

Ejemplo: NewIODemo.java