Marker interface là interface rỗng (không method) — chỉ dùng để gắn nhãn một class, báo cho JVM/thư viện rằng class đó có một tính chất nào đó.
Ví dụ chuẩn: Serializable, Cloneable, RandomAccess.
java
class User implements Serializable { } // "class này cho phép serialize"Cơ chế: code khác kiểm tra bằng instanceof. ObjectOutputStream gặp object không phải Serializable → ném NotSerializableException; Object.clone() gặp object không Cloneable → CloneNotSupportedException.
Ngày nay annotation (@FunctionalInterface, @Override) thường thay vai trò này vì mang được tham số và kiểm tra lúc compile. Nhưng marker interface vẫn hơn ở một điểm: nó tạo ra một kiểu (type), dùng được trong khai báo tham số để compiler ép buộc — điều annotation không làm được.