Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων."— Μεταγράφημα παρουσίασης:

1 Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

2 Μέθοδοι Οι μέθοδοι καθορίζουν την συμπεριφορά ενός αντικειμένου. Τα βασικά μέρη από τα οποία αποτελείται μία μέθοδος είναι τα εξής: –Το όνομα της μεθόδου –H λίστα των παραμέτρων –Ο τύπος της μεταβλητής που επιστρέφει η μέθοδος (πρωταρχικός ή κλάση του αντικειμένου που κάλεσε τη μέθοδο) –Το κυρίως σώμα της μεθόδου (που είναι μέσα σε άγγιστρα) παράδειγμα: return type methodName(type1 arg1, type2 arg2, type3 arg3 …) { κυρίως σώμα της μεθόδου } Μία μέθοδος διακρίνεται από τις υπόλοιπες από το όνομά της και τη λίστα των παραμέτρων (δύο μέθοδοι με ίδιο όνομα και διαφορετική λίστα παραμέτρων είναι διαφορετικές). Ο τύπος επιστροφής μπορεί να είναι αντικείμενα τύπου πίνακα. Οι αγκύλες του πίνακα σε αυτή την περίπτωση μπορεί να μπουν μετά τον τύπο μεταβλητής των στοιχείων του πίνακα (int[ ]) ή μετά τις παρενθέσεις που περιέχουν τα ορίσματα. Πιό ευανάγνωστη μορφή είναι η πρώτη.

3 Μέθοδοι (συνέχεια) και η λέξη this Η λίστα παραμέτρων είναι ουσιαστικά τοπικές μεταβλητές για τη μέθοδο και παίρνουν τιμές όταν καλείται η μέθοδος. Στο κυρίως σώμα μπορώ να έχω απλές εντολές, κλήσεις μεθόδων σε άλλα αντικείμενα, βρόχους κ.λπ. Η μέθοδος επιστρέφει κάποια μεταβλητή όταν ολοκληρωθεί ή void αν δεν επιστρέφει τίποτα. Η τιμή αυτή επιστρέφεται χρησιμοποιώντας την return. Στο παράδειγμα που ακολουθεί ορίζεται μία κλάση RangeClass η οποία περιέχει την μέθοδο makeRange. Η μέθοδος αυτή παίρνει ως ορίσματα 2 ακεραίους και επιστρέφει έναν πίνακα με όλους τους ακεραίους ανάμεσα στους 2 ακεραίους-ορίσματα. Πολλές φορές στο κυρίως σώμα μιας μεθόδου χρειάζεται να ανεφερθώ στο τρέχον αντικείμενο με το οποίο κλήθηκε η μέθοδος. Αυτό μπορεί να γίνει χρησιμοποιώντας τη λέξη κλειδί this. Χρησιμοποιώ την λέξη this στη θέση του ονόματος του αντικειμένου. π.χ. this.met1 η μεταβλητή αντικειμένου met1 για το τρέχον αντικείμενο, return this επιστρέφει το τρέχον αντικείμενο κ.λπ. Οι μέθοδοι που χρησιμοποιούν το this είναι μέθοδοι αντικειμένου και όχι κλάσης. Οι μέθοδοι κλάσης δηλώνονται με τη λέξη κλειδί static και δεν μπορεί να χρησιμοποιηθεί η λέξη this σε αυτές.

4 Το αποτέλεσμα είναι: The array: [ ]

5 Εμβέλεια μεταβλητών Εμβέλεια μιας μεταβλητής είναι το τμήμα του προγράμματος στο οποίο η μεταβλητή μπορεί να χρησιμοποιηθεί. Η τοπική μπορεί να χρησιμοποιηθεί μόνο στο block στο οποίο ορίζεται. Οι μεταβλητές υπόστασης και κλάσης έχουν εμβέλεια που εκτείνεται σε όλη την κλάση οπότε και μπορούν να χρησιμοποιηθούν από κάθε μέθοδο της κλάσης. Όταν μία μεταβλητή είναι μέσα σε έναν ορισμό μεθόδου, η java ελέγχει αν υπάρχει ορισμός αυτής στο τρέχων block. Στη συνέχεια φτάνει μέχρι τον ορισμό της μεθόδου. Αν δεν υπάρχει ούτε εκεί την αναζητά στην τρέχουσα κλάση και αν δεν την βρει ούτε εκεί την αναζητά στην υπερκλάση κ.λπ. Επειδή πολλές φορές μπορεί να δημιουργηθούν προγραμματιστικά λάθη κάθε φορά που χρησιμοποιούμε ίδια ονόματα μεταβλητών σε κλάσεις, υπερκλάσεις και μεθόδους καλό θα ήταν να μην χρησιμοποιούνται ίδια ονόματα για διαφορετικές μεταβλητές ανεξάρτητα από την εμβέλεια κάθε μιας από αυτές.

6 public class embeleia { int test=10; void printTest(){ int test=20; System.out.println("test: "+test); System.out.println( " this.test: "+this.test); } public static void main(String args[ ]){ embeleia st=new embeleia(); st.printTest(); } Αποτέλεσμα test: 20 this.test: 10 public class px1 { int test1=10; void printTest(){ int test=20; System.out.println("test: "+test); System.out.println("this.test: "+test1); } public static void main(String args[]){ px1 st=new px1(); st.printTest(); System.out.println("st.test1: "+st.test1); } Αποτέλεσμα test: 20 this.test: 10

7 Πέρασμα με τιμή και αναφορά Όταν τα αντικείμενα περνούν σαν παράμετροι σε μία μέθοδο κάθε αλλαγή στα αντικείμενα μέσα στη μέθοδο σημαίνει και αλλαγή στο αρχικό αντικείμενο. Το αντικείμενο περνιέται με αναφορά ενώ οι πρωταρχικοί τύποι με τιμή. Οι αρχικές τιμές των πρωταρχικών τύπων δεν αλλάζουν μέσα από τη μέθοδο που τους καλεί.

8 Μέθοδοι κλάσης Όπως υπάρχουν μεταβλητές κλάσης και αντικειμένου υπάρχουν αντίστοιχα και μέθοδοι κλάσης και αντικειμένου. Οι μέθοδοι κλάσης δεν απαιτούν ένα αντικείμενο της κλάσης για να κληθούν. Όπως συμβαίνει και με τις μεταβλητές κλάσης πριν από κάθε μέθοδο κλάσης υπάρχει η λέξη κλειδί static. Αναφέρονται στη συνέχεια οι μέθοδοι κάποιων γνωστών κλάσεων της java που μπορούν να χρησιμοποιηθούν σε κάθε πρόγραμμα. Κλάση Math. Περιλαμβάνει ένα σύνολο μαθηματικών πράξεων που μπορεί να χρησιμοποιηθεί από κάθε πρόγραμμα. Για παράδειγμα: double x = Math.sqrt(x); επιστρέφει την τετραγωνική ρίζα του x. double z = Math.max(x,y); επιστρέφει την μεγαλύτερη τιμή από τα x και y. double z = Math.pow(x,y); επιστρέφει το αποτέλεσμα του x εις την y. Κλάσεις Integer, Float, Boolean. Οι κλάσεις αυτές περιέχουν μεθόδους που μετατρέπουν πρωταρχικούς τύπους σε αντικείμενα και αντικείμενα σε πρωταρχικούς τύπους. Για παράδειγμα η μέθοδος parseInt που μετατρέπει το αντικείμενο μέσα στην παρένθεση (πρόκειται για αντικείμενο τύπου String) σε πρωταρχικό τύπο (ακέραιο). int x = Integer.parseInt(“87”);

9 Δημιουργία μεθόδων με το ίδιο όνομα και διαφορετικά ορίσματα (Υπερφόρτωση Μεθόδων) Διαφορά στον τύπο και τον αριθμό των ορισμάτων

10 Το αποτέλεσμα είναι: kalese th buildRect me syntetagmenes 25, 25, 50, 50 to orthogwnio mou: kalese th buildRect me shmeia (10,10) kai (20,20) to orthogwnio mou: kalese th buildRect me to shmeio (10,10) kai platos 50, ypsos 50 to orthogwnio mou:

11 Μέθοδος Constructor Κάθε φορά που χρησιμοποιούμε τον τελεστή new για να δημιουργήσουμε ένα αντικείμενο μιας κλάσης συμβαίνουν τα εξής: Δεσμεύεται μνήμη για το νέο αντικείμενο Αρχικοποιούνται οι μεταβλητές αυτού του αντικειμένου είτε με αρχικές τιμές είτε με default τιμές Καλείται η μέθοδος constructor της κλάσης (πολλές φορές υπάρχουν περισσότερες από μία μέθοδοι constructors) Οι μέθοδοι constructors έχουν τις εξής ιδιότητες: Έχουν το ίδιο όνομα με την κλάση Δεν έχουν επιστρεφόμενο τύπο Δεν χρησιμοποιούν return Παράδειγμα: public class VolcanoRobot { String status; int speed; int power; VolcanoRobot(String in1, int in2, int in3){ status=in1; speed=in2; power=in3; } VolcanoRobot robot1 = new VolcanoRobot ("exploring", 5, 200); robot1.status = exploring robot1.speed=5 robot1.power=200

12 Κλήση μεθόδου δημιουργού μέσα από άλλη μέθοδο δημιουργό. Η java δίνει την δυνατότητα να καλέσετε μία μέθοδο constructor μέσα από μία άλλη μέθοδο constructor που υπάρχει ήδη όταν η μία αντιγράφει μεγάλο τμήμα της συμπεριφοράς της άλλης. Δείτε το παράδειγμα που ακολουθεί: public class Kyklos { int x,y,radius; Kyklos(int xPoint, int yPoint, int radiusLength){ this.x=xPoint; this.y=yPoint; this.radius=radiusLength; } Kyklos(int xPoint, int yPoint){ this(xPoint, yPoint, 1); } public static void main(String args[ ]){ Kyklos circle_1= new Kyklos(4,5); System.out.println(circle_1.x+" "+circle_1.y+" "+circle_1.radius); Kyklos circle_2= new Kyklos(2,2,2); System.out.println(circle_2.x+" "+circle_2.y+" "+circle_2.radius); } Αποτέλεσμα

13 Υπερφόρτωση μεθόδων δημιουργών Όπως έχουμε υπερφορτωμένες μεθόδους μπορούμε να έχουμε και υπερφορτωμένες μεθόδους δημιουργούς. Με αυτό τον τρόπο μπορώ να ορίσω αντικείμενα ακριβώς όπως θέλω.

14 Αποτέλεσμα Calling MyRect2 with coordinates 25,25 50,50: MyRect: ————— Calling MyRect2 w/points (10,10), (20,20): MyRect: ————— Calling MyRect2 w/1 point (10,10), width (50) and height (50) MyRect: —————

15 Κληρονομικότητα Για να δηλώσω πως μία κλάση είναι υποκλάση μιας άλλης χρησιμοποιώ τη λέξη κλειδί extends στον ορισμό της. Για παράδειγμα η κλάση ditroxo είναι υποκλάση της κλάσης vehicle. Και η κλάση bicycle είναι υποκλάση της κλάσης ditroxo. Οι ορισμοί κλάσεων και υποκλάσεων διαμορφώνονται ως εξής: public class vehicle {... } Γράφω public class ditroxo extends vehicle{ … } Και public class bicycle extends ditroxo{... }

16 Υπέρβαση μεθόδων (overriding) Κάθε φορά που καλείται η μέθοδος ενός αντικειμένου η java αναζητά τη μέθοδο στην τρέχουσα κλάση και αν δεν την βρεί την αναζητά στην υπερκλάση. Σε κάποιες περιπτώσεις θέλουμε να διαφοροποιηθεί η συμπεριφορά μιας μεθόδου στην τρέχουσα κλάση από αυτή της υπερκλάσης. Σε αυτή την περίπτωση έχουμε υπέρβαση μεθόδου. Παράδειγμα: public class Printer { int x=0; int y=1; void printit(){ System.out.println("x is " + x + ", y is " + y); System.out.println("object ths klashs " + this.getClass().getName()); } public class subPrinter extends Printer { int z=3; void printit(){ System.out.println("x is " + x + ", y is " + y + ", z is " + z); System.out.println("object ths klashs " + this.getClass().getName()); } public static void main(String args[ ]){ subPrinter printobj = new subPrinter(); printobj.printit(); } Αποτέλεσμα x is 0, y is 1, z is 3 object ths klashs subPrinter

17 Κλήση αρχικής μεθόδου από τη νέα μέθοδο (λέξη κλειδί super) Συνήθως δημιουργούμε νέες μεθόδους που υπερβαίνουν τις αντίστοιχες στις υπερκλάσεις όταν θέλουμε να αυξήσουμε με πρόσθετη συμπεριφορά τις μεθόδους υπερκλάσεων. Σε αυτές τις περιπτώσεις μπορούμε να χρησιμοποιήσουμε τη λέξη κλειδί super ακολουθούμενη από το όνομα της μεθόδου προκειμένου να μην αντιγράφουμε τον κώδικα της αρχικής μεθόδου. (Η λέξη κλειδί this αναφέρεται στο τρέχον αντικείμενο και η super στην υπερκλάση) void methodos (int a, int b) { ……. (κώδικας νέας μεθόδου) super.methodos (a,b); ……... (κώδικας νέας μεθόδου) } Το προηγούμενο παράδειγμα θα μπορούσε να γίνει ως εξής: public class Printer { int x=0; int y=1; void printit(){ System.out.println("x is " + x + ", y is " + y); System.out.println("object ths klashs " + this.getClass().getName()); } public class subPrinter extends Printer { int z=3; void printit(){ System.out.println("z is " + z); super.printit(); } public static void main(String args[]){ subPrinter printobj = new subPrinter(); printobj.printit(); } Αποτέλεσμα z is 3 x is 0, y is 1 object ths klashs subPrinter

18 Υπέρβαση Δημιουργών Λογικά δεν μπορεί να γίνει υπέρβαση των μεθόδων δημιουργών γιατί έχουν το ίδιο όνομα με την κλάση. Κάποιες φορές χρειάζεται να αρχικοποιηθούν όχι μόνο οι τιμές των μεταβλητών που έχουν ορισθεί στην κλάση αλλά και μεταβλητές που υπήρχαν ήδη. Για να καλέσω μια μέθοδο δημιουργό σε μία υπερκλάση χρησιμοποιώ τη λέξη κλειδί super. Αυτό γίνεται στο παράδειγμα που ακολουθεί: import java.awt.Point; public class NamedPoint extends Point{ String name; NamedPoint (int x, int y, String pointname){ super(x,y); name=pointname; } public static void main(String args[ ]){ NamedPoint np = new NamedPoint(5, 5, "Shmeio"); System.out.println("x is "+np.x+", "+"y is "+np.y+", "+"name is "+np.name); } Η κλάση Point έχει μία μέθοδο δημιουργό που παίρνει 2 ορίσματα x και y και επιστρέφει ένα αντικείμενο τύπου Point. Η NamedPoint χρησιμοποιεί επιπλέον μία μεταβλητή αντικειμένου και έχει μία μέθοδο δημιουργό για να αρχικοποιήσει τα x,y και name. Προσοχή!!! Η super() πρέπει να είναι η πρώτη πρόταση στον ορισμό της costructor.


Κατέβασμα ppt "Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google