Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31
forrige næste

Kapitel 22. Indre klasser

Indhold:

Kapitlet er en forudsætning for at forstå den måde, mange værktøjer laver kode til at håndtere hændelser.

ForudsætterKapitel 12, Interfaces, afsnittet om final iKapitel 21, Avancerede klasser (ogKapitel 13, Hændelser ogKapitel 17, Flertrådet programmering for at forstå nogle af eksemplerne).

Indre klasser er mindre “hjælpeklasser” defineret inde i en anden klasse. Dette kapitel handler om de forskellige måder at definere indre klasser på, og de forhold, der her gør sig gældende.

Siden Java version 1.1 har der eksisteret 3 slags indre klasser:

Der er flere fordele ved at benytte indre klasser (visse undtagelser bliver forklaret sidst i kapitlet):

22.1. Almindelige indre klasser

En almindelig indre klasse er en klasse, der erklæres på linje med objektvariabler og metoder:

public class YdreKlasse
{ //class IndreKlasse//  //{//  //}// }

Programkoden i den indre klasse kan anvende alle den ydre klasses variabler og metoder - også de private. Den indre klasse er knyttet til et objekt af den ydre klasse.

22.1.1. Eksempel - Linjetegning

Man benytter ofte indre klasser i forbindelse med at lytte efter hændelser. Her kommer Linjetegning-eksemplet fraKapitel 11igen, men hvor vi lader en indre klasse lytte efter museklik.

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class LinjetegningIndre extends Applet
{ //// Selv private variabler er synlig for den indre klasse// private Point trykpunkt = null;
  private Point slippunkt = null;

  public void init()
  {
    Linjelytter lytter = new Linjelytter(); //this.addMouseListener(lytter);// } //// En indre klasse//  //class Linjelytter implements MouseListener//  //{// public void mousePressed (MouseEvent event)
    {
      trykpunkt = event.getPoint(); //// sæt variablen i det ydre objekt// }

    public void mouseReleased (MouseEvent event)
    {
      slippunkt = event.getPoint();
      repaint(); //// kald det ydre objekts metode// }

    public void mouseClicked (MouseEvent event) {} //// kræves af MouseListener// public void mouseEntered (MouseEvent event) {} //// kræves af MouseListener// public void mouseExited (MouseEvent event) {} //// kræves af MouseListener//  //}//  //// slut på indre klasse//  //// en metode i den ydre klasse// public void paint (Graphics g)
  {
    if (trykpunkt != null && slippunkt != null)
      g.drawLine (trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);
  }
}

Læg mærke til, at den indre klasse uden videre har adgang til den ydre klasses variabler og metoder.


forrige hjem næste
Nøgleordet abstract Lokale klasser