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

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

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

ΕΠΛ233 Επαναχρησιμοποίηση Κλάσεων

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

Κληρονομικότητα. Επαναχρησιμοποίηση Κλάσεων. Σύνθεση (παράδειγμα) Σύνθεση. χειριστήρια άλλων κλάσεων.

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

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

Παράδειγμα Σύνθεσης: Class Name

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

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

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

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

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

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

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

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

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

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

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


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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

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

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

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

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

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

Μάθημα 1 [3/11/2015].

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Διάλεξη 02: Αντικειμενοστρεφής Προγραμματισμός με την JAVA. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

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

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

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

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

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

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

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΣΥΣΧΕΤΙΣΕΙΣ ΚΛΑΣΕΩΝ (Class relationships)

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

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

Transcript:

Διάλεξη 12: Κληρονομικότητα (Inheritance) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κληρονομικότητα και Επαναχρησιμοποίηση - Υποκλάσεις/Υπερκλάσεις - Απόκρυψη ονομάτων - Το super, protected - Απενεργοποίηση κλάσεων Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Κληρονομικότητα Δύο βασικές έννοιες: Ένα είδος σχέσης Ένας προγραμματιστικός μηχανισμός για επαναχρησιμοποίηση ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 2

Επαναχρησιμοποίηση λειτουργιών (Reusability) Συνάθροιση (aggregation): σε μια κλάση εντάσσουμε ως στοιχεία χειριστήρια άλλων κλάσεων. Τα στοιχεία αυτά είναι ανεξάρτητα Σύνθεση (composition): σε μια κλάση εντάσσουμε ως στοιχεία χειριστήρια άλλων κλάσεων.τα στοιχεία αυτά παύουν να υπάρχουν όταν χαθεί το κυρίως αντικείμενο Κληρονομικότητα (inheritance):επεκτείνουμε υπάρχουσες κλάσεις, είτε προσθέτοντάς τους καινούρια στοιχεία, είτε αλλάζοντας την λειτουργικότητα μεθόδων τους Πραγματοποίηση (realization):η λειτουργικότητα που καθορίζεται από μία κλάση πρέπει να υλοποιηθεί από κάποια άλλη ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 3

Προγραμματιστικός Μηχανισμός Κληρονομικότητας Μία κλάση μπορεί να κληρονομήσει όλα τα επιτρεπτά στοιχεία (πεδία και μεθόδους) από τον πατέρα της από τον πατέρα του πατέρα της, κτλ. Μία υποκλάση μπορεί να προσθέσει καινούρια πεδία Μία υποκλάση μπορεί να προσθέσει καινούριες μεθόδους Μία υποκλάση μπορεί να επεκτείνει υφιστάμενες μεθόδους (overloading) Μία υποκλάση μπορεί να επανακαθορίσει υφιστάμενες μεθόδους (overriding) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 4

Βασικές Αρχές Κληρονομικότητας Κάθε κλάση, εκτός από την Object, κληρονομεί από ακριβώς μία κλάση(αντίθετα με την C++που επιτρέπει πολλαπλή κληρονομικότητα) Αν μία κλάση δεν δηλώσει κάποια υπερκλάση (κλάση πατέρας) τότε εξορισμού κληρονομεί από την Object Συνεπώς το class C { σημαίνει class C extends Object { Σύνταξη: class <όνομα κλάσης> extends <όνομα υπερκλάσης> { Κάθε υποκλάση κληρονομεί τα πάντα εκτός από τους constructors Αν μία κλάση δεν δηλώσει κάποια υπερκλάση (κλάση πατέρας) τότε εξορισμού κληρονομεί από την Object ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 5

Βασικές Αρχές Κληρονομικότητας(συν.) Επειδή η κλάση Objectβρίσκεται στην κορυφή της ιεραρχίας, είναι η μόνη κλάση που δεν έχει υπερκλάση Κάθε άλλη κλάση έχει σαν πρόγονο την Object Τα πεδία και μεθόδοι της object (π.χ., μέθοδος tostring()) κληρονομούνται από όλους τους απογόνους της Object ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 6

Υποκλάσεις και Υπερκλάσεις Generalize Υπερκλάση Circle Circle Data Circle Methods Υποκλάση Cylinder Circle Data Cylinder Data Circle Methods Cylinder Methods Specialize ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 7

Υποκλάσεις και Υπερκλάσεις(συν.) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 8

Υποκλάσεις και Υπερκλάσεις(συν.) class Circle { // Η ακτίνα αυτού του κύκλου private double radius; // Δημιούργησε ένα κύκλο public Circle () {radius = 1.0; // Δημιούργησε ένα κύκλο // συγκεκριμένη ακτίνα public Circle(double newradius) { radius = newradius; // Επέστρεψε την ακτίνα public double getradius() { return radius; // Επέστρεψε το εμβαδό public double getarea() { return radius * radius * π; class Cylinder extends Circle { // Το μήκος αυτού του κύλινδρου private double length; // Δημιούργησε ένα κύλινδρο public Cylinder() { super(); this.length= 1.0; // Δημιούργησε ένα κύλινδρο με // συγκεκριμένο μήκος public Cylinder(int length) { this.length= length; // Επέστρεψε το μήκος public double getlength() { return length; // Επέστρεψε τον όγκο // αυτού του κύλινδρου public double getvolume () { return getarea() * length; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 9

Επέκταση λειτουργιών Circle - radius: double + Circle() + Circle(double radius) + getradius(): double + getarea(): double Cylinder - length: double + Cylinder() + Cilinder(double length) + getlength(): double + getvolume(): double + getradius(): double + getarea(): double Η υποκλάση κληρονομεί όλες τις μεθόδους (που επιτρέπει) η υπερκλάση και επεκτείνει με περισσότερες λειτουργίες Δηλαδή, τροποποιεί την λειτουργικότητα Πρακτικά, ένα αντικείμενο της υπερκλάσης περιτυλίγεται (wrapped) μέσα στην υποκλάση Το αντικείμενο της υπερκλάσης δημιουργείται, άμεσα ή έμμεσα ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 10

Χειριστήριο Υπερκλάσης (super) Η λέξη κλειδί super αναφέρεται στην υπερκλάση Μπορεί να χρησιμοποιηθεί με δύο τρόπους: Για το κάλεσμα του constructor της υπερκλάσης Για το κάλεσμα μία μεθόδου της υπερκλάσης Στην περίπτωση που καλείται ο constructor της κλάσης τότε πρέπει να είναι η πρώτη δήλωση στον κώδικα. Σημείωση:Η λέξη κλειδίthisαναφέρεται στην υποκλάση και είναι ένα χειριστήριο προς το ίδιο το αντικείμενο. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 11

Κατασκευαστής Υπερκλάσης Οι κατασκευαστές της υπερκλάσης δεν κληρονομούνται Επικαλούνται άμεσα (explicitly) και έμμεσα(implicitly) Στην περίπτωση που δεν καλούνται άμεσα τότε καλείται έμμεσα ο no-arg constructor της υπερκλάσης ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 12

Αλυσίδωση Κατασκευαστών (Constructor Chaining) Η κατασκευή ενός στιγμιότυπου μίας υποκλάσης καλεί τους κατασκευαστές όλων των υπερκλάσεων που βρίσκονται στον μονοπάτι μέχρι τον πιο μακρύ πρόγονο JVM Class A extends Class B Class B extends Class C Class C extends Class D 1. Create() 2. Create() 3. Create() 6. Success() 5. Success() 4. Success() ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 13

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); 1. Start public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 14

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); 2. Invoke Faculty constructor public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 15

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); 3. Invoke Employee no-arg constructor public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 16

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); 4. Invoke Employee (String) constructor public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 17

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 5. Invoke Person() constructor ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 18

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 6. Execute println ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 19

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); 7. Execute println class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 20

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 8. Execute println ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 21

Παράδειγμα: Αλυσίδωση Κατασκευαστών public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); 9. Execute println class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 22

Που είναι το λάθος; public class Apple extends Fruit { class Fruit { public Fruit(String name) { System.out.println( "Fruit's constructor is invoked"); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 23

Τι θα συμβεί; class Instrument { Instrument() { System.out.println("Instrument()"); Instrument( int i ) { System.out.println("Instrument(int i)"); public class Wind extends Instrument { Wind() { System.out.println("Wind()"); Wind( int i ) { // super(); this(); System.out.println("Wind(int i)"); public static void main(string args[]) { Wind flute = new Wind(8); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 24

Απόκρυψη Ονομάτων (Name Hiding) Πεδία Μέσα σε μία κλάση, κάθε πεδίο πρέπει να έχει μοναδικό όνομα Μέσα από την κληρονομικότητα προκύπτουν περιπτώσεις που ένα πεδίο στην υποκλάση μπορεί να έχει το ίδιο όνομα με ένα πεδίο στην υπερκλάση Σε αυτή την περίπτωση, το πεδίο στην υποκλάση κρύβει/επισκιάζει (hides) το πεδίο στην υπερκλάση Για να έχουμε πρόσβαση στο πεδίο της υπερκλάσης πρέπει να χρησιμοποιήσουμε την λέξι κλειδί super Μεθόδοι Παρόμοια υπάρχει περίπτωση μία μέθοδος στην υποκλάση να έχει την ίδια υπογραφή με μία μέθοδο της υπερκλάσης Σε αυτή την περίπτωση, η μέθοδος της υποκλάσης υπερσκελίζει (overrides) την μέθοδο της υπερκλάσης ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 25

Παράδειγμα Υπερσκέλισης(Overriding) public class Circle extends GeometricObject { // Other methods are omitted /** Override the tostring method defined in GeometricObject */ public String tostring() { return super.tostring() + "\nradius is " + radius; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 26

Σύνθεση και Κληρονομικότητα Σύνθεση: Η σύνθεσηχρησιμοποιείται γενικότερα όταν χρειαζόμαστε τα χαρακτηριστικά μιας υπάρχουσας κλάσης και όχι την διαπροσωπεία της. Αντιστοιχεί σε has-a σχέσεις ανάμεσα στις κλάσεις. Κληρονομικότητα : Χρησιμοποιείται όταν θέλουμε να φτιάξουμε μια ειδική περίπτωση κάποιας κλάσης. Ανμια κλάση Β κληρονομεί από μια κλάση Α, η σχέση τους συνοψίζεται ως εξής : Η νέα κλάση Β είναι ένας τύπος της υπάρχουσας κλάσης Α. Αντιστοιχεί σε is-a σχέσεις ανάμεσα στις κλάσεις. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 27

Σύνθεση και Κληρονομικότητα public class PlaceSetting extends Custom { Spoon sp; Fork frk; Knife kn; DinnerPlate pl; PlaceSetting(int i) { super(i + 1); sp = new Spoon(i + 2); frk = new Fork(i + 3); kn = new Knife(i + 4); pl=new DinnerPlate(i + 5); public static void main (String[] args) { PlaceSetting x=new PlaceSetting(9); Ο μεταφραστής μας εξαναγκάζει να αρχικοποιήσουμε τους κληροδότες, αλλά εμείς πρέπει να φροντίσουμε για την αρχικοποίηση των αντικειμένων-στοιχείων. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 28

Τροποποιητές Πρόσβασης: Σύγκριση Τροποποιητής Πρόσβασης Ίδια Κλάση Ίδιο Πακέτο Υποκλάση Άλλα Πακέτα public protected (default) friendly private ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 29

Τροποποιητές Πρόσβασης: Σύγκριση (συν.) ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 30

protected: Παράδειγμα 1 package bank; public class BankAccount { private double balance; protected BankAccount(){ balance = 0.0; <root>/bank package bank; public class SavingsAccount extends BankAccount{ public SavingsAccount(){ balance2 = 0.0; import bank.*; public class TestBankAccount { <root> public static void main(string args[]) { BankAccount ba1 = new BankAccount(); //compile error constructor BankAccount() does not exist SavingsAccount sa1 = new SavingsAccount(); //OK. SavingsAccount() exists ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 31

protected: Παράδειγμα 2 package bank; public class BankAccount { private double balance; protected BankAccount(){ balance = 0.0; <root>/bank package client; import bank.bankaccount; public class Client extends BankAccount { private String name; public Client(){ name = test ; <root>/client import bank.*; public class TestBankAccount { <root> public static void main(string args[]) { BankAccount ba1 = new BankAccount(); //compile error constructor BankAccount() does not exist Client c = new Client(); // OK. Client() exists AND Client has access to // BankAccount() even though it is in a different package ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 32

Απενεργοποίηση της Κληρονομικότητας Με τη χρήση του τροποποιητή final public final class Math { // NOT OK Math is final cannot be inherited public class MyMath extends Math{ ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 33