Wie ist diese private variable zugreifen?
Wie ist der compiler nicht meckert, wenn ich den folgenden code schreiben?
public class MyClass
{
private int count;
public MyClass(int x){
this.count=x;
}
public void testPrivate(MyClass o){
System.out.println(o.count);
}
}
Obwohl es ist eine Instanz der gleichen Klasse, in der testPrivate
geschrieben ist, sollte es nicht geben eine Zusammenstellung der Fehler bei System.out.println(o.count)
? Nach alle, ich bin versucht, den Zugriff auf eine private variable direkt.
Der code läuft sogar gut.
Class MyClass kennt die count-variable, also kein problem
Es ist privat in der Klasse, nicht der Instanz. Java nicht zu stoppen versuchen Sie Ihre linke hand vom schlagen der rechten hand. 😉
Generieren über Eclipse oder IDEA hashCode und equals Methoden , Sie immer zu sehen, dass Weg
ja, aber ich hatte den Eindruck, dass der compiler wird smack mich auf meinen Kopf, wenn ich auch versuchen Zugriff auf private; Aber es ist privat in der Klasse, die Sinn macht. Danke
überraschend, wenn Sie über einen privaten Feld - /Methoden - /Konstruktor in einer geschachtelten Klasse können Sie immer noch Zugriff auf es in einem anderen geschachtelte Klasse den gleichen äußeren Klasse.
Es ist privat in der Klasse, nicht der Instanz. Java nicht zu stoppen versuchen Sie Ihre linke hand vom schlagen der rechten hand. 😉
Generieren über Eclipse oder IDEA hashCode und equals Methoden , Sie immer zu sehen, dass Weg
ja, aber ich hatte den Eindruck, dass der compiler wird smack mich auf meinen Kopf, wenn ich auch versuchen Zugriff auf private; Aber es ist privat in der Klasse, die Sinn macht. Danke
überraschend, wenn Sie über einen privaten Feld - /Methoden - /Konstruktor in einer geschachtelten Klasse können Sie immer noch Zugriff auf es in einem anderen geschachtelte Klasse den gleichen äußeren Klasse.
InformationsquelleAutor Kanwaljeet Singh | 2014-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen privaten member zugänglich ist, aus jeder Methode innerhalb der Klasse in der Sie deklariert ist, unabhängig davon, ob die Methode greift auf seine eigenen (
this
) - Instanz privates Mitglied oder eine andere Instanz den private Mitglied.Dies ist angegeben in JLS 6.6.1:
Diese Funktion von Java können Sie schreiben Methoden, die Sie akzeptieren eine Instanz der Klasse als argument (Z -
clone(Object other)
,compareTo(Object other)
), ohne sich auf die Klasse nicht private Getter für alle privaten Eigenschaften, die erreicht werden müssen.Danke, es macht jetzt Sinn. Ich habe immer verwendet
compareTo
undequals
mit Getter. Es war komisch, als ich bemerkte, können wir es ohne Getter zu.InformationsquelleAutor Eran
Private Felder private die Klasse als ganzes, nicht nur auf das Objekt.
Andere Klassen nicht wissen, dass MyClass hat ein Feld namens " count; jedoch Ein MyClass-Objekt weiß, dass ein anderer MyClass-Objekt hat die count-Feld.
InformationsquelleAutor Simba
Zugriffspunkte werden nicht auf Sicherheit! Sie sind Kapselung, halten die anderen vom wissen über den code.
Betrachten, wenn jemand schrieb eine Quantum Bogo Sortiert, verschwand aber, sobald er hob die letzten bug-verstehen der code bewirkt, dass man entweder gelöscht aus dem Universum oder verrückt.
Trotz dieses kleinen Nachteil, wenn Sie richtig gekapselt, dieses sollte Ihre bevorzugte Sortier-Algorithmus, der alle Felder und Methoden mit Ausnahme Sortieren sollte privat sein.
Sie nicht wissen, wie es funktioniert, und Sie wollen nicht wissen, wie es funktioniert, aber es funktioniert und das reicht. Wenn auf der anderen Seite, ist alles öffentlich, und Sie haben, um zu verstehen, wie es funktioniert, was es tut, es richtig zu verwenden-das ist einfach zu viel Aufwand, ich bleibe bei quicksort.
InformationsquelleAutor jmoreno
Keine. Es werden werfen Sie einen Kompilierungsfehler.
Dies ist ähnlich zu dem, was eine einfache getter-und setter-tut oder ein copy-Konstruktor hat. Denken Sie daran, wir können Zugang
private
Mitglieder mitthis.
Ihre
testPrivate
Methode nimmt eine Instanz von MyClass. DatestPrivate
ist eine Methode inMyClass
, Sie haben Zugang zuprivate
Eigenschaften.Definierten Methoden innerhalb der Klasse haben stets Zugriff auf es ist
private
Mitglieder, durchthis.
- und Instanz-Variablen.Aber wenn Sie definieren
testPrivate
außerhalb derMyClass
dann werden Sie nicht haben, Zugang zuprivate
Mitglieder. Dort haben Sie eine Methode verwenden oder eine setter-oder getter.InformationsquelleAutor WarFox
Methoden, Variablen und Konstruktoren deklariert werden private Zugriff nur innerhalb der Klasse selbst deklariert. Überprüfen Sie die offizielle Dokumentation
InformationsquelleAutor Dinal24