montecristo Δημοσ. 3 Μαΐου 2005 Δημοσ. 3 Μαΐου 2005 > class Employee { String Type = "Employee"; void print() { System.out.println(this.Type); } } class Skoupidiaris extends Employee { String Type = "Skoupidiaris"; } public class test2 { public static void main (String[] args) { Skoupidiaris chris = new Skoupidiaris(); chris.print(); } } Έχω διαβάσει λίγο κληρονομικότητα και μπερδεύτηκα. Το παραπάνω κομμάτι κώδικα βγάζει output "Employee". Δε θα πρεπε να βγάζει "Skoupidiaris"?
Giannis__ Δημοσ. 3 Μαΐου 2005 Δημοσ. 3 Μαΐου 2005 Apo ti stigmh pou exeis "this.Type", tha kalei panta to type tou Employee class. An itheles na kaleis to type tou Skoupidiaris class tha prepe na kaneis kati tetoio: > class Employee { String type = "Employee"; void print(String s) { System.out.println(s); } } class Skoupidiaris extends Employee { String type = "Skoupidiaris"; } public class Test2 { public static void main (String[] args) { Skoupidiaris chris = new Skoupidiaris(); chris.print(chris.type); } }
montecristo Δημοσ. 3 Μαΐου 2005 Μέλος Δημοσ. 3 Μαΐου 2005 > class Employee { String type = "Employee"; public Employee (String type){ this.type = type; } void print() { System.out.println(this.type); } } class Skoupidiaris extends Employee { public Skoupidiaris() { super("Skoupidiaris"); } } public class test2 { public static void main (String[] args) { Skoupidiaris chris = new Skoupidiaris(); chris.print(); } } edw exw pali this.type alla tipwnei "Skoupidiaris".
Dikemou Δημοσ. 3 Μαΐου 2005 Δημοσ. 3 Μαΐου 2005 i akoma pio sosta: > class Employee { String type; public Employee(String type){ this.type = type; } void print() { System.out.println(type); } } class Skoupidiaris extends Employee { public Skoupidiaris(){ super("skoupidiaris"); } } public class Test2 { public static void main (String[] args) { Skoupidiaris chris = new Skoupidiaris(); chris.print(); } } oste na fainetai pragmatika to effect tis klironomikotitas
Cue Δημοσ. 3 Μαΐου 2005 Δημοσ. 3 Μαΐου 2005 montecristo, καταρχήν να σου πω ότι η κληρονομικότητα δεν υφίσταται για τα fields μιας κλάσσης. Δλδ στο παράδειγμά σου, > class Employee { String Type = "Employee"; void print() { System.out.println(this.Type); } } class Skoupidiaris extends Employee { String Type = "Skoupidiaris"; } το πεδίο Type δεν κάνει override την τιμή του Employee αλλά την "κρύβει". Στο δεύτερο παράδειγμα που έδωσες, πέρνεις "Skoupidiaris" γιατί καλώντας τον constructor της Super Class αλλάζεις την τιμή του Type, για αυτό και όταν καλείς this.type βγάζει "Skoupidiaris". Το keyword this αναφέρεται πάντα στο object από το οποίο το χρησιμοποιείς. Και κάτι άλλο, σαν common practice βάσει coding standards καλό θα ήταν τα ονόματα των πεδίων να ξεκινάνε με μικρό γράμμα. Το κεφαλαίο χρησιμοποιείται στα ονόματα κλάσεων.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.