Arv

Klasser kan ärva från andra klasser. Med arv menas att underklassen är en instans av förälderklassen och att man kan skriva över metoder för mer specifikt bruk. I objekt beskrevs en klass variabler med hjälp av 'has a'-klausulen, arv, som skrivs med nyckelorder extends beskrivs på liknande vis med 'is a'-klausulen.
1.  public class Fordon {
2.   private int hjul;
3.
4.   public Fordon() {}
5.   public void setHjul(int h){
6.    hjul = h;
7.   }
8.   public int countHjul() {
9.    return hjul;
10.  }
11. }

1. public class Bil extends Fordon {
2.  public Bil() {}
3.  public static int countHjul() {
4.   return 4;
5.  }
6. }

1.  public class Tåg extends Fordon {
2.   private int vagnar;
3.
4.   public Tåg() {}
5.   public void setVagnar(int v){
6.    vagnar = v;
7.   }
8.   public int countHjul() {
9.    return vagnar*8;
10.  }
11. }

'Fordon har hjul. Bil är ett Fordon. Tåg är ett Fordon som har vagnar.' Basklassen, Fordon kan användas för alla typer av fordon. Hypotetiskt så använder man bilar och tåg oftast i programmiljön, så man har valt att skapa egna klasser för dem. För att hämta ett godtyckligt Fordons hjul måste man någon gång ha använt Fordon.setHjul-metoden, medans en Bil alltid har 4 hjul, och ett Tågs hjul använder formeln antal vagnar gånger 8.
Implementationen av klassen Fordon sker på följande vis:
1.  public class FordonImplementation {
2.   public static void main(String[] args) {
3.    Fordon cykel = new Fordon();
4.    Tåg t = new Tåg();
5.    cykel.setHjul(2);
6.    t.setVagnar(10);
7.    System.out.println("cykel: " + cykel.countHjul() + " hjul");
8.    System.out.println("bil: " + Bil.countHjul() + " hjul"); // Statisk!
9.    System.out.println("tåg: " + t.countHjul() + " hjul");
10.  }
11. }

Bil.countHjul() är statisk och behöver därför inte instansieras.