TL ; DR:
An interface is a pure contract — a list of methods that a class promises to implement, with no shared data and no shared code. Unlike inheritance ("is a"), interfaces express "can do".
interface Speaker {
void speak()
}
class Dog implements Speaker {
@Override
def speak() {
println("Woof")
}
}
Full lesson:
An interface defines what a class can do, not how it does it or what it is. A Truck, a Robot, and a Drone aren't the same kind of thing — but they can all Move(). You'd put Move() in a Movable interface and have each one implement it.
Interface vs abstract class
| Abstract class | Interface | |
| Has fields | Yes | Usually no |
| Has method bodies | Yes (some) | No (or default impls only) |
| Multiple "inheritance" | Usually no | Yes — a class can implement many interfaces |
| Models | "is a" | "can do" |
A class inherits from at most one parent class but can implement many interfaces. That's why interfaces are the right tool for cross-cutting capabilities like Comparable, Serializable, Iterable, etc.
The language landscape
- C# / Java — first-class
interfacekeyword. C# uses:for both inheritance and implementation; Scala usesextendsfor inheritance andimplementsfor interfaces. - Python — no separate interface; abstract base classes (ABCs) with all-abstract methods serve the same role.
- Scala — no interface keyword in plain JS (TypeScript has it). The convention is a stub class.
- C++ — a class with only pure-virtual methods is an interface. Multiple inheritance lets a class implement several.
Your task
The Speaker interface (or interface-like base) is already declared. Create a Dog class that implements it, with a speak() method that prints "Woof".
Expected output:
WoofFree plan: 30 tutor messages. Premium is unlimited.