Interfaces define contracts with no state. A class can implement many of them, which solves Java's single-inheritance restriction. Since Java , interfaces can include default and static methods.
Abstract classes sit in between: they carry fields, constructors, and a mix of abstract and concrete methods, but you can only extend of them. Use interfaces for shared capability across unrelated types and abstract classes for shared state within a family.
You also met Comparable for natural ordering, Comparator for external sorting, and Iterable/Iterator for for-each loops. These interfaces show up everywhere in Java's standard library and in real production code.