Φωτογραφία Ανδριάνα Βατσούρα
Κλήση setter απο main
από Ανδριάνα Βατσούρα - Friday, 11 May 2012, 6:29 AM
 

Καλημέρα!

Έχω πρόβλημα στην κλήση του setSalary της 5ης άσκησης όταν χρησιμοποιώ τον default constructor. 

Έχω δημιουργήσει την βασική κλάση Employee και την παράγωγη SalaryEmployee. Στην παράγωγη κλάση έχω ορίσει την private double salary, έχω δημιουργήσει τον default constructor και τον constructor  SalaryEmployee (μέσα σ'αυτόν καλώ κανονικά τον constructor της βασικής κλάσης και αρχικοποιώ και την νεα μεταβλητή μου). Στην main όταν χρησιμοποιώ  τον default constructor μπορώ να καλέσω όλους τους setter της Employee οχι όμως το setSalary. Όλες τις κλάσεις τις έχω στο ίδιο πακέτο και τους setters τους έχω βάλει προσδιοριστή ορατότητας Public. Όταν χρησιμοποιώ τον δεύτερο constructor δεν αντιμετωπίζω πρόβλημα αρχικοποίησης των μεταβλητών μου (δηλαδή θέτω τιμή στο salary κανονικά). Γιατι δεν αναγνωρίζει τον setSalary στον default constructor;

Να διευκρινήσω οτι το πρόβλημα αυτό προκύπτει μόνο όταν δημιουργώ αντικείμενο ως εξής: Employee emp=new SalaryEmployee();

Όταν όμως το δημιουργώ : SalaryEmployee emp=new SalaryEmployee(); λειτουργεί κανονικά.

 
Φωτογραφία Παναγιώτης Σκορδυλάκης
Απάντηση: Κλήση setter απο main
από Παναγιώτης Σκορδυλάκης - Friday, 11 May 2012, 8:50 AM
 
Καλημέρα Ανδριάνα,

αυτό που περιγράφεις δεν είναι πρόβλημα αλλά η κανονική συμπεριφορά της Java.

Επειδή ο τύπος του αντικειμένου δηλώνεται ως Εmployee ο compiler ψάχνει να βρει την μέθοδο setSalary() στην class Εmployee η οποία φυσικά δεν είναι ορισμένη.
Φωτογραφία Ανδριάνα Βατσούρα
Απάντηση: Κλήση setter απο main
από Ανδριάνα Βατσούρα - Friday, 11 May 2012, 9:08 AM
 

θεωρούσα οτι εφόσον προσδιορίζω στο δεξί μέρος οτι θέλω τον constructor της SalaryAccount θα ψάξει εκεί την μέθοδο. Αρα ο τρόπος που θα φτιαξουμε τα αντικείμενα μας στην main, ωστε να έχουμε πολυμορφισμό,   θα είναι μέσω της αρχικοποίησης μεταβλητών στον δεύτερο constructor; Ευχαριστώ πολύ για την βοήθεια

Φωτογραφία ΗΛΙΑΣ ΚΟΥΛΑΛΗΣ
Απάντηση: Κλήση setter απο main
από ΗΛΙΑΣ ΚΟΥΛΑΛΗΣ - Friday, 11 May 2012, 5:15 PM
 
Μπορείς να κάνεις casting. π.χ. ((SalaryEmployee)emp).setSalary(700); .
Φωτογραφία Ανδριάνα Βατσούρα
Απάντηση: Κλήση setter απο main
από Ανδριάνα Βατσούρα - Friday, 11 May 2012, 5:58 PM
 

κατάλαβα, ευχαριστώ πολύ!!!