Zugriff bei Package Struktur

Nihila

Mitglied
Hi alle,

Hab ein kleines Problem. Und zwar gibt es folgende Package-Struktur :

/package1/Klasse1.java
/package1/Klasse2.java
/Klasse3.java


Die Klasse 1 hat die Attribute:

int var1;
private int var2;
public int var3;


  1. Nun soll geklärt werden, auf welche der drei Attribute eine Methode der Klasse3 zugreifen kann, wenn ein Objekt der Klasse1 sowie entsprechende import-Statements gegeben sind. Sehe ich richtig, dass dann die Klasse3 auf int var1 sowie public int var3 zugreifen kann ???:L?
  2. Dann soll noch geklärt werden, auf welche der drei Attribute eine Klassenmethode der Klasse1 zugreifen kann. Liege ich falsch, wenn ich sage, dass diese auf alle Attribute zugreifen kann :rtfm:?
  3. Kann eine Objektmethode der Klasse Klasse1 auch auf alle diese Attribute zurückgreifen?
  4. Kann eine Objektmethode der Klasse Klasse2 auch auf alle Attribute zugreifen, wenn ein Objekt der Klasse Klasse 1 gegeben ist? Oder kann diese dann auf private int var 2 zugreifen, weil diese als private deklariert wurde :oops:?

Wäre euch echt dankbar, wenn ihr mir etwas Erleuchtung geben könntet :oops: ;).

Grüße,
Nihila
 

rme

Top Contributor
Hallo :)

Zu 1: Bei var1 steht weder public, protected noch private - diese Zugriffsart nennt sich "package private" und bedeutet, dass nur Klassen aus dem gleichen package zugreifen können.

Zu 2: Klassenmethode bedeutet normalerweise, dass die Methode static ist - da musst du mal genau nachlesen, ob das bei euch auch so präzise ist. static-Methoden können nur auf static-Variablen zugreifen.

Zu 3: Ah, da steht Objektmethode - also unterscheidet ihr die Begriffe präzise, hier ist es dann ohne static. Dann ist Aufgabe 2 damit klar, hoffe ich - und diese auch :)

Zu 4: Dazu musst du prüfen, ob die Klasse im gleichen Package ist (dann geht package-private-Zugriff und public - ansonsten nur public)

Versuch's mir diesen Hinweisen nochmal, dann schauen wir deine Lösung nochmal an :)
 
Zuletzt bearbeitet:

Nihila

Mitglied
Hallo rme :),

nochmal zum Verständnis, ob ich das richtig geschnallt habe :rtfm::

zu 1.) also wie ich das sehe, kann Klasse3 nur auf die public int var3 zugreifen, oder?

zu 2.) hier müsste die Klasse1 auf alles zugreifen, weil die ja erstens zum package1 gehört und weil es auch ihre eigenen Attribute sind und die Klassenmethode sowieso übergreifend als Rahmen über den Inhalt verfügen kann oder verdreh ich da was.

zu 3.) die Objektmethode kann ja nur auf die eigene Instanz die Attribute "ziehen". Das wären dann int var1 und public int var3. Wo ich mir unsicher bin ist, ob private int var2 sich auch auf die Objektmethode bezieht oder ob sie übergeordnet ist und nicht zur O.-methode gehört, so dass diese nicht darauf zugreifen kann.

zu 4.) Klasse2 ist ja im package1, worunter auch die Klasse1 und deren Attribute gehört. Somit würde ich sagen, dass Klasse 2 dann auf int var1 und public int var3 zurückgreifen kann.

Hab ich's soweit intus ;)?
 
Zuletzt bearbeitet:

rme

Top Contributor
Hallo nochmal :)

1: Korrekt :)

2: Beachte den Unterschied zwischen Klassenmethode und Objektmethode. Eine Klassenmethode verfügt nicht über die "this"-Referenz und kann deshalb nur auf Klassenvariablen (static) und nicht auf Instanzvariablen zugreifen.

3: "private" verbietet allen anderen Objekten bzw. Klassen (im static-Fall) den Zugriff. Wäre es sinnvoll, den eigenen Objekten den Zugriff auf ihre Attribute zu verbieten? ;)

4: Korrekt :)

Wenn du möchtest, könnte ich versuchen, die den Unterschied zwischen Objektmethoden und Klassenmethoden zu erklären - und wozu private usw. da sind bzw. wie sie sich unterscheiden. Aber vielleicht ist es dir im Prinzip ja schon klar und hat dich nur in dieser Aufgabe verwirrt :)
 

Nihila

Mitglied
Danke rme :). Warst wieder einmal eine große Hilfe :toll:. Ich glaube, in Prinzip ist mir der Unterschied klar, aber vllt. denke ich das auch nur. Wenn Du also mir das noch mal genauer erklären könntest, wäre ich Dir dankbar. Wahrscheinlich gibts da noch mehr Aspekte, die man berücksichtigen muss :rtfm:. Außerdem weiß ich gerne immer mehr :D.
 

rme

Top Contributor
Okay, ich versuch's mal :)

Wenn du eine Klasse anlegst:

Java:
class Tier {
}

dann hast du die Möglichkeit, Objekte dieser Klasse mittels [c]new[/c] anzulegen:

Java:
Tier meinHaustier = new Tier();

Erst an dieser Stelle wird in deinem Programm zum ersten Mal Speicher benötigt, denn erst [c]new[/c] sorgt dafür, dass ein Objekt der Klasse erzeugt wird. Nun soll die Klasse vermutlich irgendwelche Eigenschaften haben:

Java:
class Tier {
  String art, name;
}

Jetzt wird beim Benutzen von [c]new[/c] auch Platz angelegt, der in den Objekten mit Variablen vom Typ String gefüllt werden kann:

Java:
meinHaustier.art = "Hündchen";
meinHaustier.name = "LaBello";

Diese Eigenschaft der Klasse sind Objektvariablen, da sie sich immer auf ein bestimmtes Objekt beziehen - in diesem Fall auf das Objekt "meinHaustier". Manchmal möchte man aber Sachen tatsächlich in der Klasse speichern:

Java:
class Tier {
  String art, name;
  static Tier lieblingsTier;
}

Auf diese Weise habe ich die Möglichkeit, in der Klasse selbst etwas zu speichern - unabhängig davon, ob überhaupt Objekte dieser Klasse existieren. Ich könnte jetzt also das hier machen:

Java:
Tier.lieblingsTier = meinHaustier;

Interessant wird es jetzt, wenn ich zwei Tiere habe, also mal schnell ein weiteres anlegen:
Java:
Tier deinHaustier = new Tier();
deinHaustier.art = "Geflügeltes Einhorn";
deinHaustier.name = "Marjory Stewart-Baxter";

Jetzt würden folgende Zeilen ein identisches Ergebnis liefern:
Java:
deinHaustier.lieblingsTier;
meinHaustier.lieblingsTier;
Tier.lieblingsTier;

Das liegt daran, dass die Information in der Klasse und nicht in einem einzelnen Objekt gespeichert ist - alle teilen sich den gemeinsamen Speicher. Das ist genau der Unterschied zwischen einer Objektvariable und einer Klassenvariable. In der Praxis nutzt man bei Klassenvariablen deshalb nur die letzte Variante, also über den Namen der Klasse auf Klassenvariablen zuzugreifen.

Manchmal möchte man Methoden haben, die auch ohne Objekte benutzbar sind:

Java:
class Tier {
  String art, name;
  static Tier lieblingsTier;
  
  public static void gibLieblingsTierAus() {
    System.out.println(lieblingsTier.name + " ist mir am liebsten, aber gefüttert werden sie alle");
  }
}

Jetzt kann man auch ohne Objekt auf die Methode zugreifen:
Java:
Tier.gibLieblingsTierAus();

Der Zugriff auf "lieblingsTier" innerhalb der Methode funktioniert aber nur, weil die Variable eine Klassenvariable ist. Es handelt sich nämlich um eine Klassenmethode. Sie könnte unmöglich auf "art" oder "name" zugreifen, da dann gar nicht klar wäre, welches Objekt gemeint ist: meinHaustier oder deinHaustier?

Deshalb die erste Merkregel: Klassenmethoden können nur auf Klassenvariablen zugreifen, Objektmethoden können zusätzlich auf Objektvariablen zugreifen (da dann klar ist, welches Objekt gemeint ist, weil man ja immer das Objekt mit angeben muss, wie in meinHaustier.name).

Jetzt noch zur Sichtbarkeit: In den Beispielen habe ich keine explizite Sichtbarkeit angegeben, deshalb sind alle package-private. Den Teil hast du ja schon verstanden: Es können also nur Klassen aus demselben Package darauf zugreifen. Diese Art der Sichtbarkeit ist unabhängig davon, ob es eine Klassen- oder eine Objektvariable ist - man muss immer beides prüfen. Wenn ich kein Objekt habe, kann ich nur auf Klassenvariablen und -methoden zugreifen und wenn ich ein Objekt habe, kann ich auf die Objektvariablen dieses Objekts und trotzdem auf die Klassenvariablen der Klasse zugreifen, also auf beides.

Neben package-private gibt es noch:
  • private: Nur der Code der Klasse selbst kann darauf zugreifen
  • protected: Nur der Code der eigenen Klassen und abgeleiteter Klassen kann darauf zugreifen
  • public: Jeder kann zugreifen

Wenn du solche Aufgaben löst, musst du also immer zwei Sachen beachten: Ist die Variable static oder nicht static? Wenn sie nicht static ist, benötige ich ein Objekt der Klasse. Wenn sie static ist, benötige ich nur den Namen der Klasse.

Danach: Ist die Variable public, protected, private oder package-private? Wenn sie private ist, kann nur die Klasse selbst darauf zugreifen. Und so weiter.

Ich hoffe, jetzt ist es wieder ein bisschen klarer geworden :)

Die main-Methode ist übrigens immer static, weil Java dem Programmierer die Möglichkeit geben möchte, sich selbst die benötigten Objekte zu erzeugen. Deshalb kann man innerhalb von main nie auf Objektvariablen- oder Methoden zugreifen, sondern muss sich erst ein Objekt der eigenen Klasse anlegen - oder alles static machen, was aber unschön ist.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
LittleJavaCup Zugriff auf Klasse von package Java Basics - Anfänger-Themen 3
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
F Zugriff auf Instanzobjekte - Package does not exist Java Basics - Anfänger-Themen 10
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben