En abstrakt klass är en klass som du inte avser att skapa instanser
av. I Java kan man deklarera klasser som abstract
för att garantera
att ingen skapar instanser av klassen av misstag.
Exempel:
Anta att vi skriver ett litet ritprogram. Vi vill definiera klasser för olika geometriska figurer, till exempel cirklar, kvadrater, trianglar.
Alla klasser ska definiera en metod draw()
.
För att kunna hantera alla figurer likformigt definierar vi en
abstrakt klass GeometricShape
och låter alla klasser som representerar
en figur ärva från denna.
abstract public class GeometricShape { public GeometricShape( int ix, int iy ) { ... } protected int x; protected int y; abstract public void draw( Graphics g); public void move( int dx, int dy ) { ... } } class Square extends GeometricShape { public void draw ( Graphics g ) { ... }} class Rectangle extends GeometricShape { public void draw ( Graphics g ) { ... }}
En abstrakt klass är som en vanlig klass; du kan alltså ha variabler
som deklarerats med en abstract klass (till exempel GeometricShape
)
men
Abstrakta klasser är ganska vanliga i OOP. I fordonsexemplet är det
lämpligt att deklarera Motorfordon
och Fordon
som abstrakta eftersom
varje fordon tillhör någon av subklasserna till dessa klasser.
Om du skriver ett program där en klass överskuggar en metod som redan definierats i en superklass (se tidigare avsnitt) kan det vara idé att fråga sig om klasstrukturen är rätt. Kanske borde nuvarande klass och superklassen vara subklasser till en abstrakt klass.
Hur använder man en variabel som deklarerats så här:
GeometricShape s;
I del 4 beskriver jag ett begrepp som är snarlikt abstrakta klasser. Det kan vara idé att lägga tid på att försäkra dig om att du förstår begreppet abstrakta klasser innan du går vidare i anteckningarna, annars finns det en risk att begreppen flyter ihop.
Prova att skriva (och provköra) ett litet program som använder abstrakta klasser. Du kan utgå från fordonsexemplet om du vill.