Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
// Abstract class using Template Method pattern abstract class DataProcessor { // Template method: defines the algorithm skeleton public final void process(String data) { String validated = validate(data); // step 1 String transformed = transform(validated); // step 2 (abstract) store(transformed); // step 3 (abstract) System.out.println("Processing complete."); } // Concrete shared step protected String validate(String data) { if (data == null || data.isBlank()) throw new IllegalArgumentException("Data must not be blank"); return data.trim(); } // Abstract steps — subclasses decide how to implement protected abstract String transform(String data); protected abstract void store(String data); } class UpperCaseFileProcessor extends DataProcessor { @Override protected String transform(String data) { return data.toUpperCase(); } @Override protected void store(String data) { System.out.println("[FILE] Storing: " + data); } } class JsonProcessor extends DataProcessor { @Override protected String transform(String data) { return "{\"value\": \"" + data + "\"}"; } @Override protected void store(String data) { System.out.println("[DB] Inserting JSON: " + data); } } public class AbstractClassDemo { public static void main(String[] args) { // new DataProcessor(); // compile error — abstract class DataProcessor file = new UpperCaseFileProcessor(); file.process(" hello world "); System.out.println(); DataProcessor json = new JsonProcessor(); json.process(" 42 "); } }
Result
Open