Abstract Classes
Abstract classes define a template with some implemented methods and some abstract methods that subclasses must implement.
Example
public abstract class Vehicle {
protected String brand;
public Vehicle(String brand) {
this.brand = brand;
}
// Abstract method — must be implemented by subclasses
public abstract void start();
public abstract double fuelEfficiency();
// Concrete method — inherited as-is
public String getBrand() {
return brand;
}
}
public class ElectricCar extends Vehicle {
public ElectricCar(String brand) {
super(brand);
}
@Override
public void start() {
System.out.println(brand + " starts silently.");
}
@Override
public double fuelEfficiency() {
return 120.0; // miles per kWh equivalent
}
} Interfaces
Interfaces define a contract — a set of methods a class must implement. A class can implement multiple interfaces.
Example
// Define interfaces
public interface Printable {
void print();
}
public interface Exportable {
String export(String format);
// Default method (Java 8+)
default String exportAsJson() {
return export("json");
}
}
// Implement multiple interfaces
public class Report implements Printable, Exportable {
private String title;
private String content;
public Report(String title, String content) {
this.title = title;
this.content = content;
}
@Override
public void print() {
System.out.println(title + ": " + content);
}
@Override
public String export(String format) {
return String.format("[%s] %s: %s", format, title, content);
}
} 