JaJava · Lesson 6 of 9
Classes & OOP
Java is fully committed to OOP. Everything is a class. Even the Hello World program. Embrace it.
Java
// Abstract class
public abstract class Animal {
private String name; // private — encapsulation
public Animal(String name) { this.name = name; }
public String getName() { return name; } // getter
public abstract String speak(); // subclasses must implement
public String describe() { // can be overridden
return name + " says " + speak();
}
}
// Interface
public interface Trainable {
void learn(String trick);
List<String> getTricks();
default String showTricks() { // default implementation (Java 8+)
return String.join(", ", getTricks());
}
}
// Concrete class
public class Dog extends Animal implements Trainable {
private List<String> tricks = new ArrayList<>();
public Dog(String name) { super(name); }
@Override
public String speak() { return "Woof!"; }
@Override
public void learn(String trick) { tricks.add(trick); }
@Override
public List<String> getTricks() { return tricks; }
@Override
public String describe() {
return super.describe() + " (knows " + tricks.size() + " tricks)";
}
}
// Java 16+ records — immutable data classes
record Point(double x, double y) {
// Compact constructor for validation
Point {
if (Double.isNaN(x) || Double.isNaN(y))
throw new IllegalArgumentException("Coordinates cannot be NaN");
}
public double distance() {
return Math.sqrt(x * x + y * y);
}
}Java
// Generics
public class Pair<A, B> {
private final A first;
private final B second;
public Pair(A first, B second) {
this.first = first;
this.second = second;
}
public A getFirst() { return first; }
public B getSecond() { return second; }
@Override
public String toString() {
return "(" + first + ", " + second + ")";
}
}
// Generic method
public static <T extends Comparable<T>> T max(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
// Main usage
public static void main(String[] args) {
Dog dog = new Dog("Rex");
dog.learn("sit");
dog.learn("shake");
System.out.println(dog.describe());
System.out.println(dog.showTricks());
Point p = new Point(3, 4);
System.out.println("Distance: " + p.distance());
Pair<String, Integer> pair = new Pair<>("Alice", 30);
System.out.println(pair);
System.out.println(max("apple", "banana")); // banana
System.out.println(max(42, 17)); // 42
}