Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Σχετικά έγγραφα
Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Αντικειµενοστραφής Προγραµµατισµός

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance)

2.1 Αντικειµενοστρεφής προγραµµατισµός

(Διαφάνειες Νίκου Βιδάκη)

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

Προγράμματα με δομή Κληρονομικότητας

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

Ειδικά Θέματα Προγραμματισμού

Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στον Προγ/μό Η/Υ

Βασικά της γλώσσας JAVA

Κλάσεις και Αντικείµενα

Προγράμματα με δομή Κληρονομικότητας

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

Wrapper Classes, Abstract Classes and Interfaces

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Βασικά Στοιχεία της Java

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Αντικειμενοστρέφεια. Ορισμοί αντικειμενοστρέφειας. Κάποιες γενικές παρατηρήσεις: Περιεχόμενα. Ποιοι είναι οι ορισμοί των παρακάτω;

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, 1908

Βασικά Στοιχεία της Java

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Οντοκεντρικός Προγραμματισμός

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα Downcasting Πολυμορφισμός Late Binding

Βάση Δεδομένων. User Interface - 1 User Interface - 2

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο6

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Από τη UML στον Κώδικα. Μέρος Β

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειμενοστρεφής Προγραμματισμός

ΑΣΚΗΣΕΙΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (inheritance)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Αντικειμενοστραφής Προγραμματισμός

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Οντοκεντρικός Προγραμματισμός

02 Αντικειμενοστρεφής Προγραμματισμός

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Αντικειμενοστρεφής Προγραμματισμός

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Κάποιες γενικές παρατηρήσεις:

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Ειδικά Θέματα Προγραμματισμού

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #11

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Οντοκεντρικός Προγραμματισμός


Διδάσκων: Παναγιώτης Ανδρέου

Transcript:

Κληρονομικότητα Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr Java Κληρονομικότητα 1

Ιεραρχίες Κλάσεων Στην Java (και γενικότερα στον αντικειμενοστραφή προγραμματισμό) μπορεί από μία να κλάση να δημιουργηθεί μια νέα κλάση απόγονος που κληρονομεί όλα τα χαρακτηριστικά της αρχικής κλάσης Ο μηχανισμός αυτός ονομάζεται κληρονομικότητα (inheritance) Στην Java όλες οι κλάσεις κατάγονται (άμεσα ή έμμεσα) από μία κοινή κλάση πρόγονο: Την κλάση Object Java Κληρονομικότητα 2

Μια Ιεραρχία Κλάσεων Java Κληρονομικότητα 3

Κληρονομικότητα ΗκλάσηObject καθορίζει και υλοποιεί συμπεριφορά που υποστηρίζει κάθε κλάση της Java Είναι η πιο γενική κλάση ΗκλάσηObject, που είναι η πρώτη κλάση την ιεραρχία, και άλλες κλάσεις που βρίσκονται ψηλά στην ιεραρχία ορίζουν κατά κανόνα γενική συμπεριφορά (general behavior) για τις κλάσεις Κλάσεις που βρίσκονται πιο χαμηλά στην ιεραρχία καθορίζουν πιο εξειδικευμένη συμπεριφορά Java Κληρονομικότητα 4

Οι όροι subclass και superclass subclass: Μια κλάση απόγονος (subclass) είναι μια κλάση που επεκτείνει μια άλλη κλάση. Κάθε subclass κληρονομεί όλα τα χαρακτηριστικά των προγόνων (κλάσεων) της superclass: Αναφέρεται σε άμεσο πρόγονο αλλά και γενικότερα σε όλους τους προγόνους μιας κλάσης Για παράδειγμα, όλες οι κλάσεις της Java έχουν ως πρόγονο (πιθανόν μακρινό πρόγονο) την κλάση Object Java Κληρονομικότητα 5

Συμβατότητα Τύπων Κάθε αντικείμενο μιας υποκλάσης είναι (συμβατό) αντικείμενο με τις κλάσεις προγόνους του Δηλαδή κάθε αντικείμενο οποιασδήποτε κλάσης της Java είναι και αντικείμενο Object Το αντίστροφο δεν ισχύει Java Κληρονομικότητα 6

Τι κληρονομείται Μια υποκλάση κληρονομεί από τις κλάσεις προγόνους: Όλα τα μέλη που είναι public protected package εάν είναι η υποκλάση στο ίδιο package Java Κληρονομικότητα 7

Τι δεν κληρονομείται Οι constructors δεν κληρονομούνται Μπορούμε όμως να τους καλέσουμε ρητά με την εντολή super() Μέλη για τα οποία η υποκλάση ορίζει νέα μέλη με το ίδιο όνομα, κληρονομούνται όμως δεν φαίνονται άμεσα στην υποκλάση Java Κληρονομικότητα 8

Σύνταξη Ο ορισμός μιας κλάσης απογόνου γίνεται όμοια με τον ορισμό μιας απλής κλάσης με την προσθήκη της λέξης κλειδί: extends και το όνομα της superclass Παράδειγμα: class Super { Number anumber; } class Subbie extends Super { Float anumber; } Java Κληρονομικότητα 9

Η κλάση απόγονος (subclass) Στις κλάσεις class Super { Number anumber; } class Subbie extends Super { Float anumber; } η Subbie ορίζοντας το μέλος anumber κρύβει (hides) το μέλος anumber της κλάσης προγόνου Η απόγονος κλάση μπορεί να προσπελάσει την anumber ως εξής: super.anumber; Java Κληρονομικότητα 10

Υπερκάλυψη (override) Μεθόδων Μια κλάση μπορεί να υπερκαλύψει μεθόδους που κληρονόμησε από τις κλάσεις προγόνους της. Μπορεί δηλαδή να ξαναορίσει όποιες θέλει (από αυτές που έχει κληρονομήσει) Με τον τρόπο αυτό: Η κλάση απόγονος είναι αρκετά όμοια με τις κλάσεις προγόνους, ενώ ταυτόχρονα διαφοροποιεί τη συμπεριφορά της όπου αυτό είναι απαραίτητο Java Κληρονομικότητα 11

Παράδειγμα Υπερκάλυψης Όλες οι κλάσεις κληρονομούν μια μέθοδο tostring από την κλάση Object, που είναι πρόγονος όλων των (άλλων) κλάσεων Η βασική υλοποίηση της μεθόδου tostring επιστρέφει απλά το όνομα της κλάσης και τον κωδικό hash του αντικειμένου Οι κλάσεις μπορούν να υπερκαλύψουν τη βασική μέθοδο tostring ορίζοντας μια δική τους υλοποίηση Παράδειγμα: ΗκλάσηStack μπορεί να έχει μια μέθοδο tostring που επιστρέφει σε String τη λίστα τωνπεριεχομένωντηςstack Java Κληρονομικότητα 12

υπερκάλυψη της tostring() public class Stack {... private Vector items; // Υπερκάλυψη της μεθόδου tostring public String tostring() { int n = items.size(); StringBuffer result = new StringBuffer(); result.append("["); for (int i = 0; i < n; i++) { result.append( items.elementat(i).tostring()); if (i < n-1) result.append(","); } result.append("]"); return result.tostring(); } } Java Κληρονομικότητα 13

final method Η κλήση μιας μεθόδου της κλάσης προγόνου που έχει υπερκαλυφθεί μπορεί να γίνειμετηλέξηκλειδίsuper: Παράδειγμα: super.tostring(); final μέθοδος Εάν μια μέθοδος δηλωθεί ως final δεν μπορεί να υπερκαλυφθεί!! final mymethod() { } Java Κληρονομικότητα 14

Κληρονομιά από την κλάση Object Μέθοδοι που κληρονομούνται από την κλάση Object Επιτρέπεται να υπερκαλυφθούν (Override) clone equals/hashcode finalize tostring Δεν επιτρέπεται να υπερκαλυφθούν (είναι final): getclass notify notifyall wait Java Κληρονομικότητα 15

Πηγές/Αναφορές Java Κληρονομικότητα 16