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

Απορία στη "Σύνθεση Αντικειμένων" στη Java


niknax

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

Δημοσ.

Παίδες καλησπέρα και χρόνια πολλά σε όλους!

Έχω φτιάξει ένα πρόγραμμα που δείχνει τη δυνατότητα "σύνθεσης κλάσεων".Το ερώτημα όμως είναι γιατί δεν τρέχει αφού ο compiler δεν δείχνει λάθος,αλλά και εγώ δεν μπορώ να καταλάβω τι είναι όλα αυτά που βγάζει όταν το τρέχω..:mad:

Κώδικας:

//η κλάση δείχνει την Ημερομηνία Γέννησης

public class Hmerominia_Gennisis

{

//μεταβλητές στιγμιοτύπου

private int Hmera;

private int Minas;

private int Etos;

 

//συνάρτηση δημιουργίας

//που θα πάρει αρχικές τιμές στη

public Hmerominia_Gennisis(int day,int month,int etos)

{

Hmera = day;

Minas = month;

Etos = etos;

}

 

 

 

//μέθοδος που μετατρέπει σε String τις private μεταβλητές της κλάσης

public String toString()

{

return String.format("%d/%d/%d",Hmera,Minas,Etos);

}

}

 

//2Η ΚΛΆΣΗ

//η κλάση Fantaros δείχνει τα στοιχεία ταυτότητας του στρατιώτη

public class Fantaros

{

//μεταβλητές στιγμιοτύπου

private String Onoma;

private String Epitheto;

private Hmerominia_Gennisis Mera_Gennisis; //αναφορα σε αντικείμενο Hmerominia_Gennisis

 

 

 

 

//δημιουργός κλάσης

 

public Fantaros (String name,String epith,Hmerominia_Gennisis Hmer_Genn)

{

Onoma = name;

Epitheto = epith;

Mera_Gennisis = Hmer_Genn;

// Hmerominia_Parousiasis = Hmerom_Parousiasis;

//Hmerominia_Apolisis = Hmerom_Apolisis;

 

}//τέλος δημιουργού

//μέθοδος που μετατρέπει σε String τις private μεταβλητές της κλάσης

public String toString()

{

return String.format("%s %s.\nΗμερομηνία Γέννησης: %d.\n", Onoma,Epitheto,Mera_Gennisis);

}

 

//3Η ΚΛΆΣΗ

//Επίδειξη σύνθεσης των κλάσεων

public class Provoli {

 

 

public static void main(String[] args)

{

//δημουργία αντικεμένου Date με αναφορά Genethlia

Hmerominia_Gennisis Genethlia = new Hmerominia_Gennisis(1,12,1984);

 

//δημουργία αντικεμένου Fantaros με αναφορά Manos1

Fantaros Manos = new Fantaros ("Manos","Agnwstos",Genethlia);

 

System.out.println(Manos);

}

}//τέλος κλάσης Provoli

 

Ευχαριστώ όποιον μπορεί να βοηθήσει!:-)

Δημοσ.

δε ξερω και πολλα απο φορματινγκ αλλα οπως φαινεται απο το exception καπου πρεπει να εχεις καποιο συντακτικο λαθος. παντος αν το γραψεις ετσι " return String.format("%s %s.\nHm: %s.\n", Onoma, Epitheto, Mera_Gennisis); " δεν βγαζει exception αλλα δεν ξερω αν το βγαζει οπως το θες. περιμενε να σου απαντησει και καποιος που ξερει καλυτερα.. αν θες ριξε και μια ματια εδω

Δημοσ.

την μέθοδο format δεν την ξέρω καθόλου. Αλλά αν θες απλά να το μετατρέψεις σε String γιατι να κάνεις κάτι τέτιο ενό μπορεί να γίνει πολύ απλά .

 

π.χ. αν έχω μία μεταβλητή int x=5 και θέλω με μία μέθοδο να μου επιστραφεί σε String θα μπορουα απλά να κάνω αυτό:

 

>
public String getIntegerAsString()
{
      return ""+x;
}

Δημοσ.
την μέθοδο format δεν την ξέρω καθόλου. Αλλά αν θες απλά να το μετατρέψεις σε String γιατι να κάνεις κάτι τέτιο ενό μπορεί να γίνει πολύ απλά .

 

π.χ. αν έχω μία μεταβλητή int x=5 και θέλω με μία μέθοδο να μου επιστραφεί σε String θα μπορουα απλά να κάνω αυτό:

 

>
public String getIntegerAsString()
{
      return ""+x;
}

 

toString();

----------------------------------------

Same goes for the original poster.

 

>
System.out.println(Manos.toString();

 

 

 

http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html#print(java.lang.Object)

If you scroll down you'll see what you get when you print an object :o

Δημοσ.
toString();

----------------------------------------

 

Δεν είναι απαραίτιτο να είναι toString(). Ένα απλο παράδειγμα έφερα :-)

Δημοσ.
Δεν είναι απαραίτιτο να είναι toString(). Ένα απλο παράδειγμα έφερα :-)

 

Απλά είπα ότι υπάρχει η μεθοδός οπότε δεν πρέπει να την ξαναφτιάχνει.

Δημοσ.

H μέθοδος toString() είναι η default μέθοδος που κληρονομείται από την τάξη Object.

Αυτό δεν σημαίνει πως θα έχει την συμπεριφορά που θέλει ο προγραμματιστής καθώς συνήθως εκτυπώνει μόνο το hash code της τάξης.

 

Για την ακρίβεια:

 

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 

 

getClass().getName() + '@' + Integer.toHexString(hashCode())

 

 

Οπότε είναι αρκετά σύνηθες να κάνει ο προγραμματιστής override την μέθοδο αυτή για να έχει και τα επιθυμητά αποτελέσματα,κυρίως για debugging λόγους ή γιατί το απαιτεί η εργασία πολλές φορές ;)

Δημοσ.

>    public String toString()
  {
    return String.format("%s %s.\nΗμερομηνία Γέννησης: %d.\n", Onoma,Epitheto, ---> Mera_Gennisis <---- );
  }

ζητας απο τη format() να αντιμετοπισει ενα αντικειμενο τυπου Hmerominia_Gennisis ως ακεραιο (%d)

 

μαλλον κατι τετοιο επρεπε να πεις

 

>    public String toString()
   {
    return String.format("%s %s.\nΗμερομηνία Γέννησης: %s.\n", Onoma,Epitheto, Mera_Gennisis.toString() );
   }

παρατηρησε πως πλεον το 3ο ορισμα δεν ειναι το Mera_gennisis αλλα το String αποτελέσμα που επιστρεφει η toString() του Mera_gennisis

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

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

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