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

private instance variables in Java


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

Δημοσ.

Καλησπερα παιδια,θα θελα λιγο την γνωμη σας για τις μεταβλητες private στην Java

public class Test
{
    
    private String name = "iannis";
     
    public static void main(String[] args) 
    {
    
      Test test = new Test();
   
      test.name = "nikos";

      System.out.println(test.name);
     
    }
}

Αποτελεσμα

 

 

nikos

 

παρολο που δηλωνω την μεταβλητη private μπορω να της αλλαξω το ονομα

public class Test
{
     
    public static void main(String[] args) 
    {
    
      Test2 test = new Test2();
   
      test.name = "nikos";

      System.out.println(test.name);
     
    }
}


class Test2
{
    private String name = "kostas";
}

Αποτελεσμα

 

 

Name has private access in Test2

 

Ωραια το καταλαβα απλα η ερωτηση μου ειναι οτι αν θελω να δηλωσω μεταβλητες τυπου private στην πρωτη περιπτωση δεν μπορω?σιγουρα θα υπαρχει λογος απλα δεν τον ξερω

  • Moderators
Δημοσ.

Το να δηλώσεις μια μεταβλητή ως private εξασφαλίζει ότι μόνο η κλάση στην οποία βρίσκεται μπορεί να έχει πρόσβαση σε αυτή. Στην πρώτη περίπτωση, η name ανήκει στην κλάση Test, οπότε η Test μπορεί και να την διαβάσει και να την αλλάξει. Δεν καταλαβαίνω τι ακριβώς εννοείς με την ερώτησή σου. Πρέπει να δεις στο πρόγραμμά σου τι κλάσεις χρειάζεσαι και στη συνέχεια να δεις ποιες μεταβλητές θα είναι private, όπως στη 2η περίπτωση. Τι ακριβώς θες να κάνεις στην 1η περίπτωση;

Δημοσ.

εχω την εντύπωση οτι θέλει να την κάνει final


 

Ωραια το καταλαβα απλα η ερωτηση μου ειναι οτι αν θελω να δηλωσω μεταβλητες τυπου private στην πρωτη περιπτωση δεν μπορω?σιγουρα θα υπαρχει λογος απλα δεν τον ξερω

 

π.χ private final String name = "iannis";

Δημοσ.

Δεν προσπαθω να κανω τιποτα το ιδιαιτερο απλα θελω να δω σε ποιες περιπτωσεις εχω προσβαση στις private μεταβλητες και σε ποιες οχι.

 

Α)Αυτο που με μπερδευει αφανταστα και δεν το εχω ξεκαθαρισει ακομα ειναι γιατι βαζουν την main μεσα στην κλαση,αυτο ειναι που με μπερδευει και οσο και να εψαξα στο ιντερνετ δεν βρηκα καπου που να το εξηγουν

 

Β)Περιμενα οτι μεσα απο την main δεν θα ειχα δικαιωμα να αλλαξω την τιμη των private μεταβλητων οπως γινεται στην δευτερη περιπτωση

 

Γ)Γιατι στην πρωτη περιπτωση μεσα απο την main εχω δικαιωμα ν αλλαξω τις τιμες των μεταβλητων ενω στην δευτερη δεν εχω?

 

Πρεπει να σας εχω μπερδεψει πολυ ε :-D εγω να δειτε ποσο μπερδεμενος ειμαι :whistle:

  • Moderators
Δημοσ.

Τα πάντα στη Java είναι αντικείμενα. Ακόμα και το ίδιο το πρόγραμμά σου είναι ένα αντικείμενο. Η main είναι μια μέθοδος της κλάσης Test, άρα έχει πρόσβαση σε όλες τις private μεταβλητές της Test. Στη δεύτερη περίπτωση έχεις 2 κλάσεις, την Test και την Test2. Η Test2 δεν έχει δικαίωμα να δει ή να πειράξει τις private μεταβλητές μιας άλλης κλάσης.

 

Πάντως επειδή έχω δει ότι ασχολείσαι ταυτόχρονα και με C και με Java, θα σου έλεγα να παρατήσεις τη μια απ' τις 2 γιατί είναι εντελώς διαφορετικές στη νοοτροπία τους και μπερδεύεσαι άσκοπα.

Δημοσ.

 

Η main είναι μια μέθοδος της κλάσης Test, άρα έχει πρόσβαση σε όλες τις private μεταβλητές της Test.

 

 

αααααααααα γεια σου αδερφε μου :-D ,κεντησες :-D ,εχω μπει δεν ξερω κ εγω σε ποσες σελιδες στο ιντερνετ και αυτο δεν το ανεφερε κανενας,δεν το βρηκα πουθενα,δεν ξερεις ποσο μου ξεκαθαρισες το τοπιο,τωρα μαλιστα,το πιασα το νοημα

 

 

Πάντως επειδή έχω δει ότι ασχολείσαι ταυτόχρονα και με C και με Java, θα σου έλεγα να παρατήσεις τη μια απ' τις 2 γιατί είναι εντελώς διαφορετικές στη νοοτροπία τους και μπερδεύεσαι άσκοπα.

 

Η αληθεια ειναι οτι ειχα ξεκινησει με C πριν 8 χρονια και ειπα να την ξαναφρεσκαρω αλλα εχεις οντος δικιο,θα ακολουθησω την συμβουλη σου

Δημοσ.

αααααααααα γεια σου αδερφε μου :-D ,κεντησες :-D ,εχω μπει δεν ξερω κ εγω σε ποσες σελιδες στο ιντερνετ και αυτο δεν το ανεφερε κανενας,δεν το βρηκα πουθενα,δεν ξερεις ποσο μου ξεκαθαρισες το τοπιο,τωρα μαλιστα,το πιασα το νοημα

 

 

Η αληθεια ειναι οτι ειχα ξεκινησει με C πριν 8 χρονια και ειπα να την ξαναφρεσκαρω αλλα εχεις οντος δικιο,θα ακολουθησω την συμβουλη σου

Σε αντίθεση με την C/C++ όπου δηλώνεις ένα entry point και αυτό είναι συνήθως η main, στην Java δηλώνεις ποια θα είναι η main class σου και αυτή οφείλει να έχει μία main public μέθοδο.

 

Αυτό σημαίνει ότι μπορείς να έχεις main μέθοδο σε όλες τις κλάσεις σου αλλά θα καλείται αυτή της main class.

Δημοσ.

 

Αυτό σημαίνει ότι μπορείς να έχεις main μέθοδο σε όλες τις κλάσεις σου αλλά θα καλείται αυτή της main class.

 

Πολυ καλη πληροφορια αυτη φιλε μου σ ευχαριστω,οσο παει και ξεκαθαριζει το τοπιο

Δημοσ.

Πολυ καλη πληροφορια αυτη φιλε μου σ ευχαριστω,οσο παει και ξεκαθαριζει το τοπιο

 

 

Αυτό το γεγονός (με την main) είναι και ένα από τα arguments όσων λένε για τον "μπαρσταδεμένο" χαρακτήρα της C++, όπου έχει ένα entry point και αυτό δεν είναι μέσα σε κλάση αλλά "ξεκάρφωτο". 

Δημοσ.

pg.457 @Pearson Absolute Java 5th Edition - Walter Savitch 2012
 
Είναι από το βιβλίο που σου είχα στείλει. Όλα τα ερωτήματά σου μπορούν να λυθούν από ένα βιβλίο. Συν το γεγονός ότι αυτά που διαβάζεις είναι σωστά (για την έκδοση Java που πραγματεύεται πάντα). Έχουν προτείνει και άλλα μέλη κάποια βιβλία. Διαλέγεις και...

"

παίρνεις

"

. :D

post-223995-0-02160900-1397294953_thumb.png

Δημοσ.

εχω μπει δεν ξερω κ εγω σε ποσες σελιδες στο ιντερνετ και αυτο δεν το ανεφερε κανενας,δεν το βρηκα πουθενα

 

Ο λόγος που δεν το αναφέρει κανείς είναι ότι θεωρείται αυτονόητο. Αν κάνεις ένα google για "java private" το κάθε ένα από τα πρώτα results θα σε βγάλει σε μια σελίδα όπου λιγότερο ή περισσότερο άμεσα αναφέρεται πως κάτι δηλωμένο private μπορείς να το "δεις" μόνο από την ίδια κλάση στην οποία έχει δηλωθεί.

 

Αν μέχρι τότε δεν είχες συνειδητοποιήσει πως είσαι μέσα στην class Test και βασικά προσπαθείς να δεις ένα private της class Test νομίζω αυτό θα ήταν αρκετό για να καταλάβεις τι γίνεται.

  • Like 1
Δημοσ.

Φιλε gon την καλημερα μου,ειχα κανει Format και το εσβησα το αρχειακι,νομισα οτι το ειχα χασει αλλα ειχα ξεχασει οτι ηταν στο inbox μου,μολις το κατεβασα και αρχιζω το διαβασμα,ναι εισαι σε φορμα γιατι θα επανερθω με πολλες σπαζοκεφαλιες :-D Την καλημερα μου σε ολους και ευχαριστω για την ανταποκριση :-)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...