public class FileSolution
{
    public static void main(String[] args)
    {
        File[] files = new File[4];
        files[0] = new WordDoc("script.doc");
          // Videos have a name and running time
        files[1] = new Video("trailer.mpg", 57);
        files[2] = new Picture("radcliffe.jpg");
        files[3] = new Picture("watson.jpg");

        for (int k = 0; k < files.length; k++)
            openAndRedisplay(files[k]);
    }

    public static void openAndRedisplay(File f)
    {
        System.out.println(f.getName() + ": " + f.open());
        System.out.print("Redisplay: ");
        f.redisplay();
        System.out.println();
    }
}

abstract class File
{
    File(String nm)         { name = nm; }
    public String getName() { return name; }
    public void redisplay() { }

    abstract public String open();

    private String name;
}

class WordDoc extends File
{
    WordDoc(String nm)      { super(nm); }
    public String open()    { return "open Word document"; }
}

class Video extends File
{
    Video(String nm, int tm)
    {
        super(nm);
        playingTime = tm;
    }

    public String open()
    {
        return "play " + playingTime + " second video";
    }

    public void redisplay()
    {
        System.out.print("replay video");
    }

    private int playingTime;
}

class Picture extends File
{
    Picture(String nm)      { super(nm); }
    public String open()    { return "show picture"; }
}
