Log In

JAVA GUIDE - Κλάσεις (Μέρος 3ο)

Thunder's picture

Στο προηγούμενο άρθρο μιλήσαμε για την δημιουργία αντικειμένων, αλλά και τον τρόπο με τον οποίο τα χρησιμοποιούμε. Σε αυτό το άρθρο, το οποίο θα είναι το τρίτο και τελευταίο μέρος της αναφοράς μας στις κλάσεις, θα μιλήσουμε για τις υπερ-κλάσεις, τις υπο-κλάσεις και τον τύπο abstract.

 

 

Υπερ-κλάσεις και υπο-κλάσεις

 

Στην Java και γενικότερα στις αντικειμενοστρεφείς γλώσσες προγραμματισμού μπορούμε να ορίσουμε μία κλάση η οποία συνδέει νοηματικά πολλές επιμέρους κλάσεις. Η κλάση αυτή λέγεται υπερ-κλάση (superclass) και οι επιμέρους κλάσεις υπο-κλάσεις (subclasses). Οι υπο-κλάσεις μπορούν να κληρονομήσουν κάποιες μεταβλητές της υπερ-κλάσης, αλλά μπορούν επίσης να έχουν και δικές τους μεταβλητές που τις διαφοροποιούν από τις υπόλοιπες υπο-κλάσεις.

 

Για την δήλωση των υπερκλάσεων δεν χρειάζεται κάποια λέξη κλειδί. Αντίθετα κατά την δήλωση των υπο-κλάσεων πρέπει να γράψουμε την λέξη κλειδί extends:

public class <όνομα υπο-κλάσης> extends <όνομα υπερ-κλάσης>{

...

}

 

 

Παράδειγμα 1:

Έστω ότι έχουμε την κλάση Oxima. Η κλάση Oxima μπορεί να χωριστεί σε: Autokinito και Motosikleta.

Στην περίπτωση αυτή η κλάση Oxima είναι superclass, ενώ οι κλάσεις Autokinito και Motosikleta subclasses. Οι υπο-κλάσεις κληρονομούν τις μεταβλητές kivika, rodes, marka, montelo.

Η κλάση Autokinito έχει επιπλέον τις μεταβλητές portes και kathismata, ενώ η κλάση Motosikleta τις μεταβλητές katigoria.

 

public class Oxima {

            private int kivika, rodes;

            private String marka, montelo;

}

 

public class Autokinito extends Oxima{

            private int portes, kathismata;

}

 

public class Motosikleta extends Oxima{

            private String katigoria;

}

 

 

Παράδειγμα 2:

Έστω ότι έχουμε την κλάση Mousiko_Organo. Αυτή μπορεί να χωριστεί σε: Enxordo, Pneusto και Krousto.

Η κλάση Mousiko_Organo είναι superclass, ενώ οι κλάσεις Enxordo, Pneusto και Krousto subclasses.

Η κλάση Enxordo έχει την μεταβλητή xordes, η κλάση Pneusto την μεταβλητή iliko και η κλάση Krousto την μεταβλητή eidos.

 

public class Mousiko_Organo {

}

 

public class Enxordo extends Mousiko_Organo {

            private int xordes;

}

 

public class Pneusto extends Mousiko_Organo {

            private String iliko;

}

 

public class Krousto extends Mousiko_Organo {

            private String eidos;

}

 

 

Abstarct

 

Όταν θέλουμε να αναφερθούμε σε μία κλάση ή μέθοδο της οποίας η έννοια είναι αφηρημένη τότε χρησιμοποιούμε την λέξη κλειδί abstract. Μία κλάση είναι αφηρημένη όταν είναι πολύ γενική και δεν είναι υλοποιήσιμη. Για παράδειγμα η κλάση Μουσικό Όργανο θα μπορούσε να θεωρηθεί αφηρημένη καθώς είναι πολύ γενική. Ένας άλλος λόγος για τον οποίο μπορούμε να την θεωρήσουμε αφηρημένη είναι ότι δεν χρειαζόμαστε κάποιο αντικείμενο της, παρά μόνο αντικείμενα των υπο-κλάσεων της. Όσο αφορά τις μεθόδους, λέμε ότι μία μέθοδος είναι αφηρημένη όταν υλοποιείται με διαφορετικό τρόπο σε κάθε υπο-κλάση και δεν υλοποιείται καθόλου στην υπερ-κλάση.

 

***Όταν μία κλάση περιέχει μία ή περισσότερες abstract μεθόδους, τότε η κλάση αυτή πρεέπι είναι υποχρεωτικά abstract.

 

Για να δηλώσουμε μία κλάση αφηρημένη γράφουμε:

abstract class <όνομα κλάσης> {

}

 

Για να δηλώσουμε μία μέθοδο αφηρημένη γράφουμε:

abstract <τύπος μεθόδου> <όνομα μεθόδου>(<ορίσματα αν υπάρχουν>);

 

 

Παράδειγμα 3:

abstract class Mousiko_Organo {

            abstract void play();

}

 

public class Enxordo extends Mousiko_Organo {

            public void play(){

                        εντολές για έγχορδα

            }

}

 

public class Pneusto extends Mousiko_Organo {

            public void play(){

                        εντολές για πνευστά

            }

}

 

public class Krousto extends Mousiko_Organo {

            public void play(){

                        εντολές για κρουστά

            }

}

 

 

Στο παραπάνω παράδειγμα η κλάση Mousiko_Organo είναι abstract επειδή είναι γενική και έχει μία abstract μέθοδο. Η μέθοδος αυτή είναι η play, η οποία δεν υλοποιείται στην superclass, αλλά υλοποιείται με διαφορετικό τρόπο στις subclasses.

 

Παρόλο που σε μία αφηρημένη μέθοδο η υλοποίηση σε κάθε κλάση είναι διαφορετική, η κλήση αυτής της μεθόδου γίνεται με τον ίδιο τρόπο. Πρώτα δημιουργούμε αντικείμενο της υπο-κλάσης που θέλουμε και στην συνέχεια καλούμε την μέθοδο.

 

Αυτό το άρθρο ήταν το τέλος της αναφοράς μας στις κλάσεις. Μείνετε συντονισμένοι για την συνέχεια της σειράς!