Java › Interfaces & Abstract Classes
How would you implement the 'mixin' pattern in Java using default methods on an interface, letting a class gain reusable behavior without traditional inheritance?
IntermediateAnswer
A mixin-style interface provides reusable default method implementations that any implementing class can gain simply by declaring `implements MixinInterface`, without needing to extend any particular base class -- since a class can implement multiple such mixin interfaces simultaneously (unlike single-class inheritance), this provides a flexible, composition-friendly way to add cross-cutting reusable behavior (like a Loggable mixin providing a default log() method, or a Comparable-adjacent mixin adding comparison convenience methods) to otherwise unrelated classes, without forcing them into a shared inheritance hierarchy just to gain that one piece of shared functionality.
public interface Loggable {
default void log(String message) {
System.out.println("[" + getClass().getSimpleName() + "] " + message);
}
}
public class OrderService implements Loggable { } // gains log() capability via the mixin
public class PaymentGateway implements Loggable { } // completely unrelated class, ALSO gains log()
new OrderService().log("Order created"); // "[OrderService] Order created"Real-world example Two entirely unrelated classes, OrderService and PaymentGateway (with no common meaningful superclass relationship), both implement a shared Loggable mixin interface to gain identical default logging behavior, avoiding the need to force them into an artificial shared inheritance hierarchy purely to share this one small piece of cross-cutting functionality.