Frage

Lassen Sie uns sagen, dass wir eine Klasse foo haben, die eine private Instanzvariable bar hat.

Lassen Sie uns nun eine weitere Klasse haben, baz, die extends foo. Kann nicht-statische Methoden in baz Variable foo Zugang bar, wenn es keine Zugriffsmethode in foo definiert ist?

Ich arbeite in Java, übrigens.

War es hilfreich?

Lösung

Nein, nicht nach dem Programmiersprache Java Spezifikation, 3. Auflage :

  

6.6.8 Beispiel: Privat-Felder, Methoden und Konstruktoren

     

Ein privater   Klasse Mitglied oder ein Konstruktor   zugänglich nur innerhalb des Körpers der   Top-Level-Klasse (§7.6), die einschließt   Die Erklärung des Mitglieds oder   Konstrukteur. Es wird nicht vererbt   Unterklassen.

Aber unabhängig von dieser Sprache Einschränkung, Sie können Zugang private Felder durch Reflexion :

Field privateStringField = 
   MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);

String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);

Andere Tipps

Nein, dass Sie sollten protected. verwenden

Für Fragen wie diese, wo eine Tabelle auf der Website hier: http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

Im Grunde wollen Sie öffentliche oder geschützte Variable in foo deklariert werden, da diese die Variablen, die Unterklassen von ihren Eltern erben und damit in baz gesehen.

Child-Klassen können nicht private Mitglieder zugreifen (das ist der springende Punkt bei der privaten Zugangskontrolle).

... wenn es keine Zugriffsmethode in foo definiert?

Sie müssen Accessoren. Außerdem Vererbungs kümmern, sollte diese var wirklich in Eltern sein? Denken Sie daran, IS-A-Check ..

Sie können keine privaten Variablen in abgeleiteten Klassen zugreifen. Normalerweise würden Sie wollen „geschützt“ oder „Paket“ (Standard) Level-Zugriff für diesen Einsatz. Allerdings, wenn Sie wirklich schwierig sein möchten, können Sie mithilfe von Reflektion und AccessibleObject , um es zu bekommen. Ich würde tun, dass für die Produktion Code nicht empfehlen, es sei denn, Sie wirklich in einer Bindung sind; für die Prüfung, usw., es ist in Ordnung.

Um eine private Variable eines Superklasse in einer Unterklasse zu verwenden, wird eine Zugriffsmethode erforderlich. verwenden Else den geschützten Modifikator statt privat.

Die privaten Variablen (n) eine Klasse haben immer einen Bereich innerhalb dieser Klasse. Wenn es bei den Unterklassen geteilt werden muss, sollte es erklärt „geschützt“

wird
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top