Προς το περιεχόμενο

java κληρονομικότητα


montecristo

Προτεινόμενες αναρτήσεις

Δημοσ.

>
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"?

Δημοσ.

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);
}
}

Δημοσ.

>
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".

Δημοσ.

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 :)

Δημοσ.

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 καλό θα ήταν τα ονόματα των πεδίων να ξεκινάνε με μικρό γράμμα. Το κεφαλαίο χρησιμοποιείται στα ονόματα κλάσεων.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...