Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
import java.util.List; // Interface defining a contract interface Printable { void print(); // implicitly public abstract } interface Saveable { boolean save(String destination); } // Interface extending multiple interfaces interface Document extends Printable, Saveable { String getTitle(); int getPageCount(); } // Concrete implementation class PdfDocument implements Document { private final String title; private final List<String> pages; PdfDocument(String title, List<String> pages) { this.title = title; this.pages = pages; } @Override public String getTitle() { return title; } @Override public int getPageCount() { return pages.size(); } @Override public void print() { System.out.println("=== PDF: " + title + " ==="); for (int i = 0; i < pages.size(); i++) { System.out.printf("Page %d: %s%n", i + 1, pages.get(i)); } } @Override public boolean save(String destination) { System.out.printf("Saving '%s' to %s%n", title, destination); return true; // success } } public class InterfaceDemo { // Programming to the interface — works for any Document implementation static void processDocument(Document doc) { System.out.println("Processing: " + doc.getTitle() + " (" + doc.getPageCount() + " pages)"); doc.print(); doc.save("/tmp/" + doc.getTitle().replaceAll("\\s+", "_") + ".pdf"); } public static void main(String[] args) { PdfDocument doc = new PdfDocument( "Java Guide", List.of("Introduction to Java", "Data Types", "Control Flow") ); processDocument(doc); } }
Result
Open