PK Z1<0cvideo/RecordingDevice.javapackage video; public interface RecordingDevice { public String getMedium(); // recording medium (e.g, tape, disk) public double getCapacity(); // in terms of hours public void record(); // starts the recording process }PK Z1.video/Driver.javapackage video; public class Driver { public static void main(String[] args) { double capacity = 10; Vcr vcr = new Vcr(capacity); System.out.println(vcr); System.out.println("=================================="); vcr.play(); System.out.println("[Medium: " + vcr.getMedium() + "]"); System.out.println("[Capacity: " + vcr.getCapacity() + "]"); System.out.println("[Mode: " + vcr.getMode() + "]"); System.out.println("[Status: " + vcr.getStatus() + "]"); System.out.println("=================================="); vcr.stop(); vcr.setMode("EP"); vcr.record(); System.out.println(vcr); } }PK Z1n˶tvideo/Vcr.javapackage video; public class Vcr extends VideoPlayer implements RecordingDevice { private final String medium = "TAPE"; private String mode; private double capacity; public Vcr(double theCapacity) { mode = "SP"; capacity = theCapacity; } public void setMode(String theMode) { mode = theMode; } public String getMode() { return mode; } // Interface public String getMedium() { return medium; } public double getCapacity() { return capacity; } public void record() { status = "RECORDING"; } // Output public String toString() { String result = ""; result += "[VCR Status: " + status + "]"; result += "[Mode: " + mode + "]"; return result; } }PK Z1Z9TTvideo/VideoPlayer.javapackage video; public abstract class VideoPlayer { protected String status; public VideoPlayer() { stop(); } public void stop() { status = "STOPPED"; } public void play() { status = "PLAYING"; } public void pause() { status = "PAUSED"; } public String getStatus() { return status; } } PK Z1<0cvideo/RecordingDevice.javaPK Z1.)video/Driver.javaPK Z1n˶tvideo/Vcr.javaPK Z1Z9TTvideo/VideoPlayer.javaPK t