├── src ├── devices │ ├── Scanner.java │ ├── Printer.java │ ├── ConcreteScanner.java │ ├── ConcretePrinter.java │ ├── Device.java │ └── ComboDevice.java └── application │ └── Program.java ├── .gitignore ├── .classpath └── .project /src/devices/Scanner.java: -------------------------------------------------------------------------------- 1 | package devices; 2 | 3 | public interface Scanner { 4 | 5 | String scan(); 6 | } 7 | -------------------------------------------------------------------------------- /src/devices/Printer.java: -------------------------------------------------------------------------------- 1 | package devices; 2 | 3 | public interface Printer { 4 | 5 | void print(String doc); 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | 25 | # Eclipse 26 | .settings/ 27 | -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/devices/ConcreteScanner.java: -------------------------------------------------------------------------------- 1 | package devices; 2 | 3 | public class ConcreteScanner extends Device implements Scanner { 4 | 5 | public ConcreteScanner(String serialNumber) { 6 | super(serialNumber); 7 | } 8 | 9 | @Override 10 | public void processDoc(String doc) { 11 | System.out.println("Scanner processing: " + doc); 12 | } 13 | 14 | @Override 15 | public String scan() { 16 | return "Scanned content"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | course 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/devices/ConcretePrinter.java: -------------------------------------------------------------------------------- 1 | package devices; 2 | 3 | public class ConcretePrinter extends Device implements Printer { 4 | 5 | public ConcretePrinter(String serialNumber) { 6 | super(serialNumber); 7 | } 8 | 9 | @Override 10 | public void processDoc(String doc) { 11 | System.out.println("Printer processing: " + doc); 12 | } 13 | 14 | @Override 15 | public void print(String doc) { 16 | System.out.println("Printing: " + doc); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/devices/Device.java: -------------------------------------------------------------------------------- 1 | package devices; 2 | 3 | public abstract class Device { 4 | 5 | public String serialNumber; 6 | 7 | public Device(String serialNumber) { 8 | this.serialNumber = serialNumber; 9 | } 10 | 11 | public String getSerialNumber() { 12 | return serialNumber; 13 | } 14 | 15 | public void setSerialNumber(String serialNumber) { 16 | this.serialNumber = serialNumber; 17 | } 18 | 19 | public abstract void processDoc(String doc); 20 | } 21 | -------------------------------------------------------------------------------- /src/devices/ComboDevice.java: -------------------------------------------------------------------------------- 1 | package devices; 2 | 3 | public class ComboDevice extends Device implements Scanner, Printer { 4 | 5 | public ComboDevice(String serialNumber) { 6 | super(serialNumber); 7 | } 8 | 9 | @Override 10 | public void print(String doc) { 11 | System.out.println("Combo printing: " + doc); 12 | } 13 | 14 | @Override 15 | public String scan() { 16 | return "Combo scan result"; 17 | } 18 | 19 | @Override 20 | public void processDoc(String doc) { 21 | System.out.println("Combo processing: " + doc); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/application/Program.java: -------------------------------------------------------------------------------- 1 | package application; 2 | 3 | import devices.ComboDevice; 4 | import devices.ConcretePrinter; 5 | import devices.ConcreteScanner; 6 | 7 | public class Program { 8 | 9 | public static void main(String[] args) { 10 | 11 | ConcretePrinter p = new ConcretePrinter("1080"); 12 | p.processDoc("My Letter"); 13 | p.print("My Letter"); 14 | 15 | System.out.println(); 16 | ConcreteScanner s = new ConcreteScanner("2003"); 17 | s.processDoc("My Email"); 18 | System.out.println("Scan result: " + s.scan()); 19 | 20 | System.out.println(); 21 | ComboDevice c = new ComboDevice("2081"); 22 | c.processDoc("My dissertation"); 23 | c.print("My dissertation"); 24 | System.out.println("Scan result: " + c.scan()); 25 | } 26 | } 27 | --------------------------------------------------------------------------------