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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Πανεπιστήμιο Πατρών ΟΝΣΟΚΕΝΣΡΙΚΟ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΙΙ (C++) Πολσμορθιζμός. Σμήμα Μητανικών Ηλεκηρονικών Τπολογιζηών και Πληροθορικής

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Protected: αν κάποια πεδία και μέθοδοι είναι protected μπορούν να τα δουν όλοι οι απόγονοι της κλάσης. Το βιβλίο δεν το συνιστά.

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Παράδειγμα χρήσης κληρονομικότητας

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Διαδικτύου

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

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

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

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

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2007 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

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

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

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

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

ΗΥ-252 Οντοκεντρικός Προγραµµατισµός Βασίλης Χριστοφίδης. Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 12 Σεπτεµβρίου 2002

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

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

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

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

Διάγραμμα Κλάσεων. Class Diagram

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

4 Συλλογές Αντικειμένων

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

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

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

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

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

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

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

Transcript:

Μία εταιρεία πληρώνει τους εργαζόμενους της σε εβδομαδιαία βάση. Οι αποδοχές των εργαζόμενων υπολογίζονται με τέσσερις διαφορετικούς τρόπους : Α) Μισθωτοί (SalariedEmployee), πληρώνονται με σταθερό ποσό εβδομαδιαία ανεξάρτητα από το πόσες ώρες δούλεψαν. Β) Ωρομίσθιοι (HourlyEmployee), πληρώνονται με την ώρα και λαμβάνουν επιπλέον αποδοχές για τις υπερωρίες. Γ) Πωλητές (CommissionEmployee), πληρώνονται με ποσοστά επί των πωλήσεων. Δ) Μισθωτοί πωλητές (BasePlusCommissionEmployee), πληρώνονται με ένα βασικό ποσό και επιπλέον με ποσοστό επί των πωλήσεων. Η εταιρεία ζητά να αναπτύξετε μια Java εφαρμογή (TestPayroll) για να υπολογίζει την μισθοδοσία των υπαλλήλων της. Οι κλάσεις Employee, SalariedEmployee, HourlyEmployee, CommissionEmployee, BasePlusCommissionEmployee να ανήκουν στο πακέτο payroll και στην εφαρμογή TestPayroll να γίνει import του πακέτου payroll. Ανάλυση άσκησης Employee SalariedEmployee CommissionEmployee HourlyEmployee BasePlusCommissionEmployee Χρησιμοποιούμε την «γενική» κλάση Employee για να περιγράψουμε τις βασικές ιδιότητες και μεθόδους που είναι κοινές για όλες τις κατηγορίες εργαζομένων. Το διάγραμμα δείχνει πως οι κλάσεις για τις διάφορες κατηγορίες εργαζομένων κληρονομούν την κλάση του εργαζομένου. Στο παράδειγμα μας δεν θα υπάρξει η ανάγκη να δημιουργηθεί αντικείμενο τύπου Employee, θα πρέπει κάθε φορά να καθορίζουμε τον τύπο του εργαζομένου, για το λόγο αυτό η κλάση Employee θα είναι abstract (Μια τέτοια τάξη δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία αντικειμένων). Τα χαρακτηριστικά για την τάξη Employee είναι firstname, lastname, socialsecuritynumber. Επίσης θα πρέπει να υπάρχει μια μέθοδος για τον υπολογισμό των αποδοχών που θα την ονομάσουμε earnings. Η μέθοδος αυτή απαιτείται για

όλους τους εργαζομένους αλλά υπολογίζει διαφορετικά τις αποδοχές ανά τύπο εργαζομένου. Για το λόγο αυτό θα δηλωθεί ως abstract στην υπερτάξη Employee και η κάθε υποτάξη θα παρακάμπτει την μέθοδο earnings έχοντας την κατάλληλη υλοποίηση (method overriding). Η κλάση SalariedEmployee κληρονομεί και επεκτείνει την κλάση Employee. Η κλάση περιλαμβάνει έναν κατασκευαστή που με την εντολή super(first,last,socialsecuritynumber); καλεί τον κατασκευαστή της υπερτάξης για να αρχικοποιήσει τα πεδία first,last,socialsecuritynumber τα οποία κληρονομεί από την υπερτάξη. Με την μέθοδο earnings υπολογίζουμε τις αποδοχές του Μισθωτού υπαλλήλου. Η μέθοδος tostring() της υπερτάξης Employee επιστρέφει «όνομα, επίθετο, Αριθμό ασφάλισης». Η μέθοδος tostring() της υποτάξης SalariedEmployee «παρακάμπτει» την μέθοδο της υπερτάξης και επιστρέφει τύπο εργαζομένου, όνομα, επίθετο, Αριθμό ασφάλισης». Κατά κάποιο τρόπο, η νέα μέθοδος καταργεί τη δράση της αρχικής. Επιπλέον καλεί την μέθοδο tostring() της υπερτάξης Employee με την χρήση του super για να λάβει τις πληροφορίες για τα «όνομα, επίθετο, Αριθμό ασφάλισης». Η κλάση HourlyEmployee κληρονομεί και επεκτείνει την κλάση Employee. Η κλάση όμοια με την SalariedEmployee περιλαμβάνει έναν κατασκευαστή που με την εντολή super(first,last,socialsecuritynumber ); καλεί τον κατασκευαστή της υπερτάξης για να αρχικοποιήσει τα πεδία first,last,socialsecuritynumber τα οποία κληρονομεί από την υπερτάξη. Η κλάση BasePlusCommissionEmployee κληρονομεί και επεκτείνει την κλάση CommissionEmployee και συνεπώς και την κλάση Employee. Η κλάση περιλαμβάνει έναν κατασκευαστή που με την εντολή super( first, last, socialsecuritynumber, grosssalesamount, rate ); καλεί τον κατασκευαστή της υπερτάξης που είναι η CommissionEmployee και να αρχικοποιήσει τα πεδία που κληρονομεί. Στη μέθοδο earnings υπολογίζει τον μισθό με την εντολή return getbasesalary() + super.earnings(); Αυτό είναι ένα παράδειγμα επαναχρησιμοποιήσιμου κώδικα που επιτυγχάνετε με την κληρονομικότητα.

Στο πρόγραμμα Payroll έχουμε έναν πίνακα με 4 εργαζόμενους. Στη συνέχεια δημιουργούμε έναν εργαζόμενο για κάθε τύπο και τους αποθηκεύουμε στον πίνακα. Στο for loop εμφανίζουμε τα στοιχεία του κάθε εργαζομενου του πίνακα. Με την γραμμή if ( employees[ i ] instanceof BasePlusCommissionEmployee ) συμπεραίνουμε εάν το αντικείμενο έχει δημιουργηθεί από την κλάση BasePlusCommissionEmployee, εάν ναι τύπωσε τον παλιό βασικό μισθό, υπολόγισε και τύπωσε αύξηση 10% επι του βασικού μισθού και τύπωσε επίσης τις νέες αποδοχές του. Τέλος με το τελευταίο for loop με τη βοήθεια της μεθόδου getname() επιστρέφετε το όνομα της κλάσης που δείχνει τον τύπο του κάθε εργαζομένου του πίνακα. Κάθε αντικείμενο στην Java γνωρίζει από ποια κλάση προέρχεται και μπορεί να πάρει πληροφορίες για αυτή μέσω της μεθόδου getclass. Στον ορισμό των κλάσεων Employee, SalariedEmployee, HourlyEmployee, CommissionEmployee, BasePlusCommissionEmployee η πρώτη γραμμή περιέχει την εντολή Αυτό σημαίνει ότι ανήκει στο πακέτο payroll. Δείτε από την εξερεύνηση τον φάκελο class του project TestPayroll. Θα έχει δημιουργηθεί ένας υποφάκελος payroll όπου εκεί αποθηκεύονται ta class files όλων των κλάσεων που περιέχουν την εντολή Για να μπορέσει να βλέπει η εφαρμογή TestPayroll τις κλάσεις του πακέτου payroll θα πρέπει να εισάγω τις κλάσεις του πακέτου με την εντολή import payroll.*; // Employee.java // Employee abstract superclass. public abstract class Employee private String firstname; private String lastname; private String socialsecuritynumber; public Employee( String first, String last, String ssn ) firstname = first; lastname = last; socialsecuritynumber = ssn; // set first name public void setfirstname( String first ) firstname = first; // return first name public String getfirstname() return firstname;

// set last name public void setlastname( String last ) lastname = last; // return last name public String getlastname() return lastname; // set social security number public void setsocialsecuritynumber( String number ) socialsecuritynumber = number; // should validate // return social security number public String getsocialsecuritynumber() return socialsecuritynumber; // return String representation of Employee object return getfirstname() + " " + getlastname() + "\nsocial security number: " + getsocialsecuritynumber(); // abstract method overridden by subclasses public abstract double earnings(); // end abstract class Employee =========================================================================== // SalariedEmployee.java // SalariedEmployee class extends Employee. public class SalariedEmployee extends Employee private double weeklysalary; public SalariedEmployee( String first, String last, String socialsecuritynumber, double salary ) super( first, last, socialsecuritynumber ); setweeklysalary( salary ); // set salaried employee's salary public void setweeklysalary( double salary ) weeklysalary = salary < 0.0? 0.0 : salary; // return salaried employee's salary public double getweeklysalary()

return weeklysalary; // calculate salaried employee's pay; // override abstract method earnings in Employee public double earnings() return getweeklysalary(); // return String representation of SalariedEmployee object return "\nsalaried employee: " + super.tostring(); // end class SalariedEmployee =========================================================================== // HourlyEmployee.java // HourlyEmployee class extends Employee. public class HourlyEmployee extends Employee private double wage; // wage per hour private double hours; // hours worked for week public HourlyEmployee( String first, String last, String socialsecuritynumber, double hourlywage, double hoursworked ) super( first, last, socialsecuritynumber ); setwage( hourlywage ); sethours( hoursworked ); // set hourly employee's wage public void setwage( double wageamount ) wage = wageamount < 0.0? 0.0 : wageamount; // return wage public double getwage() return wage; // set hourly employee's hours worked public void sethours( double hoursworked ) hours = ( hoursworked >= 0.0 && hoursworked <= 168.0 )? hoursworked : 0.0; // return hours worked public double gethours() return hours;

// calculate hourly employee's pay; // override abstract method earnings in Employee public double earnings() if ( hours <= 40 ) // no overtime return wage * hours; else return 40 * wage + ( hours - 40 ) * wage * 1.5; // return String representation of HourlyEmployee object return "\nhourly employee: " + super.tostring(); // end class HourlyEmployee ============================================================================ // CommissionEmployee.java // CommissionEmployee class extends Employee. public class CommissionEmployee extends Employee private double grosssales; // gross weekly sales private double commissionrate; // commission percentage public CommissionEmployee( String first, String last, String socialsecuritynumber, double grossweeklysales, double percent ) super( first, last, socialsecuritynumber ); setgrosssales( grossweeklysales ); setcommissionrate( percent ); // set commission employee's rate public void setcommissionrate( double rate ) commissionrate = ( rate > 0.0 && rate < 1.0 )? rate : 0.0; // return commission employee's rate public double getcommissionrate() return commissionrate; // set commission employee's weekly base salary public void setgrosssales( double sales ) grosssales = sales < 0.0? 0.0 : sales; // return commission employee's gross sales amount public double getgrosssales() return grosssales; // calculate commission employee's pay; // override abstract method earnings in Employee

public double earnings() return getcommissionrate() * getgrosssales(); // return String representation of CommissionEmployee object return "\ncommission employee: " + super.tostring(); // end class CommissionEmployee ============================================================================ // BasePlusCommissionEmployee.java // BasePlusCommissionEmployee class extends CommissionEmployee. public class BasePlusCommissionEmployee extends CommissionEmployee private double basesalary; // base salary per week public BasePlusCommissionEmployee( String first, String last, String socialsecuritynumber, double grosssalesamount, double rate, double basesalaryamount ) super( first, last, socialsecuritynumber, grosssalesamount, rate ); setbasesalary( basesalaryamount ); // set base-salaried commission employee's base salary public void setbasesalary( double salary ) basesalary = salary < 0.0? 0.0 : salary; // return base-salaried commission employee's base salary public double getbasesalary() return basesalary; // calculate base-salaried commission employee's earnings; // override method earnings in CommissionEmployee public double earnings() return getbasesalary() + super.earnings(); // return String representation of BasePlusCommissionEmployee return "\nbase-salaried commission employee: " + super.getfirstname() + " " + super.getlastname() + "\nsocial security number: " + super.getsocialsecuritynumber(); // end class BasePlusCommissionEmployee ============================================================================

// Payroll.java // Employee hierarchy test program. import java.text.decimalformat; import javax.swing.joptionpane; import payroll.*; public class TestPayroll public static void main( String[] args ) DecimalFormat twodigits = new DecimalFormat( "0.00" ); // create Employee array Employee employees[] = new Employee[ 4 ]; // initialize array with Employees employees[ 0 ] = new SalariedEmployee( "John", "Smith", "111-11-1111", 800.00 ); employees[ 1 ] = new CommissionEmployee( "Sue", "Jones", "222-22-2222", 10000,.06 ); employees[ 2 ] = new BasePlusCommissionEmployee( "Bob", "Lewis", "333-33-3333", 5000,.04, 300 ); employees[ 3 ] = new HourlyEmployee( "Karen", "Price", "444-44-4444", 16.75, 40 ); String output = ""; // generically process each element in array employees for ( int i = 0; i < employees.length; i++ ) output += employees[ i ].tostring(); // determine whether element is a BasePlusCommissionEmployee if ( employees[ i ] instanceof BasePlusCommissionEmployee ) // downcast Employee reference to // BasePlusCommissionEmployee reference BasePlusCommissionEmployee currentemployee = ( BasePlusCommissionEmployee ) employees[ i ]; double oldbasesalary = currentemployee.getbasesalary(); output += "\nold base salary: $" + oldbasesalary; currentemployee.setbasesalary( 1.10 * oldbasesalary ); output += "\nnew base salary with 10% increase is: $" + currentemployee.getbasesalary(); // end if output += "\nearned $" + employees[ i ].earnings() + "\n"; // end for // get type name of each object in employees array for ( int j = 0; j < employees.length; j++ ) output += "\nemployee " + j + " is a " + employees[ j ].getclass().getname(); JOptionPane.showMessageDialog( null, output ); // display output System.exit( 0 ); test t = new test();

System.out.println("Hi"); System.out.println(t.getClass().getName()); // end main // end class Payroll Δυνατότητα Προσπέλασης public protected χωρίς προσδιοριστή private Από την ίδια κλάση Από τις κλάσεις του ίδιου πακέτου x Από οποιαδήποτε κλάση εκτός του πακέτου όπου ανήκει η κλάση x x x Από μια υποκλάση του ίδιου πακέτου x Από μια υποκλάση έξω από το πακέτο όπου ανήκει η κλάση x x