Αφηρημένη κλάση (abstract class)

Γενικές αρχές για αφηρημένες κλάσεις

Μια κλάση που περιέχει τουλάχιστον μία abstract μέθοδο, δηλώνεται η ίδια ως abstract. Για παράδειγμα:

abstract class GraphicObject 
{
	int x, y;
	void moveTo(int newX, int newY)
	{
		//υλοποίηση
	}
	abstract void draw();
}

Η παραπάνω κλάση περιέχει τη μέθοδο draw() η οποία είναι abstract.
Μια μέθοδος λέγεται abstract όταν δεν είναι υλοποιημένη ή αλλιώς όταν δεν έχει σώμα και άγγιστρα.
Μια αφηρημένη μέθοδος δηλώνεται με τον προσδιοριστή abstract όπως παρακάτω:

abstract void draw();

Δεν μπορούμε να δημιουργήσουμε αντικείμενα από μια αφηρημένη κλάση

Μια αφηρημένη κλάση μπορεί να έχει τις δικές της μεταβλητές όπως και στατικά πεδία και μεθόδους

Μια αφηρημένη κλάση μπορεί να έχει υποκλάσεις (μπορεί να γίνει extended)
(i) Αν η υποκλάση μιας αφηρημένης κλάσης υλοποιεί όλες τις αφηρημένες μεθόδους της υπερκλάσης, τότε είναι μια κανονική κλάση.
(ii) Αν η υποκλάση μιας αφηρημένης κλάσης δεν υλοποιεί όλες τις αφηρημένες μεθόδους της υπερκλάσης, ή έχει κάποια δική της αφηρημένη μέθοδο, τότε και η υποκλάση προσδιορίζεται ως abstract.

Μια αφηρημένη κλάση μπορεί να υλοποιήσει (implement) μια διεπαφή (interface)

Αν μια κλάση (όχι υποχρεωτικά αφηρημένη) κάνει implement μια διεπαφή και δεν υλοποιήσει έστω και μία μέθοδο της διεπαφής, τότε η κλάση προσδιορίζεται ως abstract

Γενικό παράδειγμα

abstract class GraphicObject 
{
	int x, y;

	void moveTo(int newX, int newY)
	{
		//υλοποίηση
	}
	
	abstract void draw();  //αφηρημένη μέθοδος
	
	abstract void resize();  //αφηρημένη μέθοδος
}

class Rectangle extends GraphicObject 
{
	void draw() 
	{
		//υλοποίηση
	}
	
	void resize() 
	{
		//υλοποίηση
	}
}

UML Διάγραμμα για αφηρημένη κλάση

Στα uml διαγράμματα η αφηρημένη κλάση απεικονίζεται όπως παρακάτω: