// Basic interface
interface Drawable {
void draw(); // Implicitly public abstract
// Default method (Java 8+)
default void resize() {
System.out.println("Resizing...");
}
// Static method (Java 8+)
static void printInfo() {
System.out.println("This is a Drawable interface");
}
}
// Implementing interface
class Circle implements Drawable {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle implements Drawable {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
// Override default method (optional)
@Override
public void resize() {
System.out.println("Resizing rectangle specifically");
}
}
// Multiple interfaces
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
class Duck implements Drawable, Flyable, Swimmable {
@Override
public void draw() {
System.out.println("Drawing a duck");
}
@Override
public void fly() {
System.out.println("Duck is flying");
}
@Override
public void swim() {
System.out.println("Duck is swimming");
}
}
// Functional interface
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
// Can have default methods
default void print(int result) {
System.out.println("Result: " + result);
}
}
// Usage
Drawable circle = new Circle();
circle.draw();
circle.resize(); // Uses default implementation
Drawable.printInfo(); // Static method call
// Polymorphism
Drawable[] shapes = {new Circle(), new Rectangle()};
for (Drawable shape : shapes) {
shape.draw();
}
// Functional interface with lambda
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;
int sum = add.calculate(5, 3);
int product = multiply.calculate(5, 3);