OOP Sichbarkeit folgender Variable:

chrilux

Mitglied
Moin,

bin immer noch an Klausurvorbereitungen und habe folgende Frage einer Altklausur vorliegen:
Java:
package p

class C {
int x;
....
...
}

-> Erläutern Sie an welchen Stellen eines Programmes x sichtbar ist und wo nicht.


Die "Musterantwort" die ich vorliegen habe sagt:

"Die Variable x ohne Sichtbarkeitsattribute ist an die Lebensdauer der Klasse C
gebunden, die Variable existieren nur solange die Klasse aktiv ist. Die Variable ist auch
nur innerhalb der Klasse C sichtbar."



Meine Antwort wäre aber:

"Die Variable x ist innerhalb des Paketes "p" Sichbar, da eine variable ohne Sichtbarkeitsattribut das Attribut "default" bekommt. Default sorgt dafür, dass es innerhalb des Paketes sichtbar ist. Natürlich ist x an die Laufzeit der Klasse C gebunden."


Hat vielleicht einer von Euch eine EXAKTE Antwort auf die Fragestellung?
 

Machareder

Bekanntes Mitglied
ich könnte Sie dir auch anders beantworten:
gehe aus dass x ein JFrame ist bei ausführen des packages ist das JFrame nicht sichtbar wenn aber die klasse c ausgeführt wird -> dann ist es sichtbar
 

chrilux

Mitglied
Danke erstmal,

die Antworten sorgen trotzdem grad für VErwirrung...


Also:


"x ist zur Laufeit von Klasse C im kompletten package sichbar?!"
 

Machareder

Bekanntes Mitglied
"x ist zur Laufeit von Klasse C im kompletten package sichbar?!"
nein
x ist nur sichtbar sobald C ausgeführt wird und warum sollte es im ganzen package sichtbar sein?! Da glaub ich versteh ich einerseits deine Frage nicht richtig, anderer seits denkst du viel zu kompliziert :D
Merk dir einfach:
x ist sichtbar sobald die Klasse C ausgeführt wird. Sobald die Klasse C beendet wird ist x nichtmehr sichtbar
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

wobei man hier den Begriff "Laufzeit" besser durch "Gültigkeit" ersetzen sollte!

Also solange ein Objekt der Klasse C existiert, hier hier innerhalb die variable x gültig/sichtbar!

Gruß
Klaus
 

chrilux

Mitglied
Jaaaaa das dachte ich auch immer :D

Aber hier steht, wenn kein modifizierer in Form von public, private oder sowas davor steht, ist es quasi wie

default int x;

Somit wäre das im package sichtbar...


Oder gilt das nur für Methoden?
 

VfL_Freak

Top Contributor
Mit diesen Modifizierern schränkt Du dort ggf. nur die Sichtbarkeit innerhalb der Klasse C ein !!

Mit Methode verhält es sich analog - immer auch die Klasse oder das Package bezogen!

Gruß
Klaus
 

chrilux

Mitglied
Noch eine kurze Frage ob ichs richtig verstanden habe:

Frage:
"Dürfen zwei Attribute einer Klasse den gleichen Namen besitzen? Begründen Sie!"

Ich habe jetzt mal folgendes Szenario angenommen:

Java:
public class Attribute {
int x;

public void meth(int a){
    int x = a;
    this.x = 15;
}
    
}

Kurz gefasst: Dürfen, ja! (Siehe meine Annahme) - Machen, eher nein. Kommt nur zu unnötigen Fehlerquellen...

Oder?
 

CerO

Mitglied
Hallo,

ich glaube das die antworten hier nicht ganz Korrekt sind.

In der Fragestellung steht doch:
-> Erläutern Sie an welchen Stellen eines Programmes x sichtbar ist und wo nicht.
Es wird also die "Sichtbarkeit" der Eigenschaft gefragt und nicht ihre Lebensdauer.
Und Sichtbar wäre der Integer x der Klasse C im gesamten Package p.

Klar "lebt" die Eigenschaft nur solange das Objekt der Klasse existiert, aber das würde auf jeden der 4 Sichtbarkeitsmodifizierer zutreffen. Egal ob default, public, private, protected.
Und bei Methoden haben sie die selbe bedeutung wie bei Eigenschaften.

Eine von vielen Tutorial-seiten die das beweisen (mit schön großer Schrift):
Java: Sichtbarkeit

Zu deiner 2. Frage:

Java:
public class Attribute {
int x;
 
public void meth(int a){
    int x = a;
    this.x = 15;
}
    
}

Ja das geht, da du in der Methode meth eine "Lokale Variable" x hast, die nur innerhalb der Methode sichtbar ist. Mit this.x zeigst du auf das Klassenattribut x. Fehlermeldungen wirst du keine davon bekommen, jedoch meidet man so etwas um keinen zu Komplizierten Code zu erzeugen, (wenn es nicht anders möglich ist).

Grüße
CerO
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Aber die Frage ist ja, ob es zwei Attribute in einer Klasse geben darf, die den gleichen Namen haben. Und das würde ich klar mit Nein beantworten.

Das Beispiel zeigt ja nur, dass es auch eine lokale Variable mit gleichem Namen geben kann.

Mit den besten Grüßen,

Konrad
 

VfL_Freak

Top Contributor
Moin,

Aber die Frage ist ja, ob es zwei Attribute in einer Klasse geben darf, die den gleichen Namen haben. Und das würde ich klar mit Nein beantworten.
Das Beispiel zeigt ja nur, dass es auch eine lokale Variable mit gleichem Namen geben kann.
So wie hier gezeigt, geht es natürlich schon ...

Java:
public class Attribute 
{
    int x;
    int x; // DAS geht natürlich nicht - aber sagt einem dann auch sofort der Compiler !!
     
    public void meth(int a)
    {
        int x = a; // ist hier nur lokal bekannt !!
        this.x = 15; // Zugriff auf die Membervariable müsste immer so durchführt werden !!
    }
}
Ob das so wirklich Sinn macht, ist eine ganz andere Frage :noe:
Irgendwann (vor allem wenn das Programm ein bissel größer ist) kommt man garantiert durcheinander! Also IMMER eindeutige Bezeichner wählen - wobei 'x' als Name dann auch schon sehr mies ist !!

Gruß
Klaus
 

Neue Themen


Oben