protected

Angelika_25

Bekanntes Mitglied
Hallo ich habe folgende Klassen:
Java:
public class Rect {
	protected int width;
	protected int height;
	
	public Rect (int width, int height) {
		this.width=width;
		this.height=height;
	}

}
und
Java:
public class ColorRect extends Rect{
	protected String color;
	
	public ColorRect(String color, int width, int height) {
		super(width, height);
		this.color=color;
	}

}
Rect r4=new ColorRect(1024, 768, "Yellow");

Grundsätzlich wäre das in Ordnung, aber auf meinem Aufgabenblatt steht, dass das nicht geht,
weil kein Zugriff von außen auf color möglich ist.
Nur auf color nicht?
In der Klasse rect sind die Variablen doch auch protected?
Kann mir das mal einer erklären?


Viele Grüße
 

The_S

Top Contributor
Du greifst ja auch nicht von außen auf eine der Attribute zu. Man kommt von außen (außer im selben Package) auch nicht auf die anderen protected Attribute.
 
T

Tomate_Salat

Gast
Hätte ich dazu schreiben sollen, stimmt, geht aber auch aus dem Link hervor.

Edit besser formulieren hätte ichs auch können :D. Ja ich bin noch bei meinem ersten kaffee heute morgen, gebt mir Zeit wach zu werden :)
 
Zuletzt bearbeitet von einem Moderator:

Angelika_25

Bekanntes Mitglied
Aber warum geht dann beispielsweise dieses:
Java:
ColorRect r2=new ColorRect(640, 480, "Green");

Was ist daran so anders wie bei dem Beispiel das nicht geht?

Ich steh glaub ich auf dem Schlauch...
 

Der Müde Joe

Top Contributor
Jetzt muss ich genau nachfragen:

Was soll den nicht gehen? Oder was ist deiner Meinung nach falsch?

Es ist ein Konstruktoraufruf. Der Konstruktor ist public.
 
T

Tomate_Salat

Gast
Hallo ich habe folgende Klassen:
Java:
public ColorRect(String color, int width, int height)

Java:
ColorRect r2=new ColorRect(640, 480, "Green");

Nein mit dem Konstruktor kann das nicht gehen, wenn dann:
Java:
ColorRect r2=new ColorRect("Green",640,480);

und der Zugriffsmodifizierer von deinem Konstruktor ist public, also wieso sollte das nicht gehen?
 

Angelika_25

Bekanntes Mitglied
Also ich habe ein Blatt mit diesen Aussagen:
Java:
//in Ordnung
Rect r1=new Rect(800, 600);

//in Ordnung
ColorRect r2=new ColorRect(640, 480, "Green");

//geht nicht
ColorRect r3=new Rect(320, 240);

//in Ordnung
//Von außen kein Zugriff auf color möglich!
Rect r4=new ColorRect(1024, 768, "Yellow");

Diese wollte ich jetzt alle nachvollziehen und verstehen...


P.S.: Die Kommentare sind nicht von mir, sondern von dem Lehrer....
 
T

Tomate_Salat

Gast
Also ich habe ein Blatt mit diesen Aussagen:
Java:
//Von außen kein Zugriff auf color möglich!
Rect r4=new ColorRect(1024, 768, "Yellow");

Nun ja, ich denke der Aufruf erfolgt von einem anderen Paket aus, in diesem Falle ist [c]color[/c] in der Referenz nicht sichtbar für andere Objekte und kann dadurch von außen her nicht direkt (außer über setter o. andere Methoden, die ColorRect bereitstellt) verändert werden.
Ich veranschauliche mal anhand eines Strukturbaumes:

Code:
src
 |--Programm.java
 |--schule
         |- ColorRect.java
         |- Rect.java
         |- TestKlasse.java

Dabei liegt [c]TestKlasse[/c] im selben Paket(Schule) wie [c]ColorRect[/c] aber [c]Programm(.java)[/c] liegt außerhalb. [c]TestKlasse[/c] hat somit zugriff auf [c]protected[/c], wohingegen die Referenz in [c]Programm[/c] keinen hat:

Programm:
Java:
import schule.ColorRect;


public class Programm
{
	public Programm()
	{
		ColorRect cr	= new ColorRect(400, 300, "Red");
		// cr.color		= "blue"; <-- Geht nicht!
	}
}

schule.TestKlasse
Java:
package schule;

public class TestKlasse
{
	public TestKlasse()
	{
		ColorRect	cr	= new ColorRect(500, 400, "Green");
		cr.color 		= "Blue";
	}
}

MFG

Tomate_Salat
 

Schumi

Bekanntes Mitglied
Nun ja, ich denke der Aufruf erfolgt von einem anderen Paket aus, in diesem Falle ist [c]color[/c] in der Referenz nicht sichtbar für andere Objekte und kann dadurch von außen her nicht direkt (außer über setter o. andere Methoden, die ColorRect bereitstellt) verändert werden.

Da sie ein Objekt der Oberklasse referenziert, welche kein color attribut besitzt ist auf diesem Objekt die color Information nicht vorhanden, auch wenn sie beim instantiieren der spezialisierten Klasse gesetzt wird. Wie gesagt geht es bei der Aufgabe nicht um (Paket-)Sichtbarkeiten. Siehe auch http://www.java-forum.org/java-basics-anfaenger-themen/100136-polymorphie.html (da war ja TS auch schon aktiv ;) )
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
Ja ich war noch iwie auf das protected focusiert. [c]Rect[/c] kennt kein color und kann das damit auch nicht ändern.
Java:
Rect r4=new ColorRect(1024, 768, "Yellow");
sollte wohl auch eher so ausschauen
Java:
Rect r4=(Rect) new ColorRect(1024, 768, "Yellow");

An dieser Stelle möchte ich nochmal an mein Kaffee-Problem erinnern :lol:
 

Michael...

Top Contributor
Was der Kommentar soll, keine Ahnung:
//Von außen kein Zugriff auf color möglich!
zu mal da noch in Ordnung dabei steht.

Warum Variante 3 nicht gehen soll keine Ahnung??
Vielmehr sollte Variante 2 und 4 nicht gehen da es einen Konstruktor ColorRect(int, int, String) nicht gibt, sondern nur ColorRect(String, int, int)...
... sofern die im ersten Post aufgeführten Klassen tatsächlich so aussehen.
 
T

Tomate_Salat

Gast
Oh ich halt die klappe und hol mir einen 2ten Kaffe, ey das gibts nicht :oops:

zu meiner Verteidung: ich hab iwie in der morgendlichen Schlaftrunkenheit vergessen das Rect die Basis-klasse ist und nicht ColorRect :oops:
 
Zuletzt bearbeitet von einem Moderator:

Schumi

Bekanntes Mitglied
Was der Kommentar soll, keine Ahnung:
//Von außen kein Zugriff auf color möglich!
zu mal da noch in Ordnung dabei steht.

Warum Variante 3 nicht gehen soll keine Ahnung??
Vielmehr sollte Variante 2 und 4 nicht gehen da es einen Konstruktor ColorRect(int, int, String) nicht gibt, sondern nur ColorRect(String, int, int)...
... sofern die im ersten Post aufgeführten Klassen tatsächlich so aussehen.

Naja, über das Rect kommt man halt nicht an color sondern erst nach einem möglichen Cast auf ColorRect. Das stimmt so dann schon. Und das das Konstruieren des Objektes so korrekt (= in Ordnung) ist ist ja unbestritten (wenn man mal von der inkorrekten Parameterfolge absieht... ;-) )
 

Wortraum

Bekanntes Mitglied
//in Ordnung
//Von außen kein Zugriff auf color möglich!
Rect r4=new ColorRect(1024, 768, "Yellow");
[/code]
Hier geht es nicht um Zugriffsmodifikatoren, sondern darum, Objekte und Vererbung zu verstehen.

Da ColorRect von Rect erbt, kann es alles, was auch Rect kann; man darf also der Variable vom Typ Rect ein ColorRect‐Objekt zuweisen. Rect kennt jedoch keine Variable color, und deshalb ist der Aufruf r4.color nicht erlaubt – auch wenn das Objekt dahinter diese Variable hat.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Sichtbarkeit protected: Attribute trotzdem aufrufbar. Java Basics - Anfänger-Themen 4
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
S protected = nicht protected? Java Basics - Anfänger-Themen 9
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
wilmaed protected class Java Basics - Anfänger-Themen 0
K Vererbung protected NUR für Unterklassen? Java Basics - Anfänger-Themen 17
M Schlüsselworte Ohne Modifizierer gleichbedeutend mit protected? Java Basics - Anfänger-Themen 6
K Compiler-Fehler vererbtes protected Java Basics - Anfänger-Themen 41
K Protected und Private Deklaration Java Basics - Anfänger-Themen 8
B Vererbung Probleme bei Zugriff auf protected-Methoden in einer Unterklasse Java Basics - Anfänger-Themen 27
J protected Methoden Java Basics - Anfänger-Themen 8
W Frage public protected konstruktor Java Basics - Anfänger-Themen 6
B Kapselung Klasse private, Konstruktor protected Java Basics - Anfänger-Themen 10
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
F Ewiges Leid mit "protected" (oder "wie der beste Freund eine hinrücks betrügt") Java Basics - Anfänger-Themen 26
A Frage zu Protected in SubSubKlasse Java Basics - Anfänger-Themen 4
G Protected Variablen außerhalb der eigenen Klassenhierarchie sichtbar Java Basics - Anfänger-Themen 5
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
stekoe2000 protected abstrac class Java Basics - Anfänger-Themen 3
B public und protected Java Basics - Anfänger-Themen 11
S Veränderung von Protected Daten durch Übergabe? Java Basics - Anfänger-Themen 3
G Public ,private,protected Java Basics - Anfänger-Themen 1
M Konstruktor protected machen Java Basics - Anfänger-Themen 7
H protected Java Basics - Anfänger-Themen 2
U public, private, protected und "default access" - Java Basics - Anfänger-Themen 14
V Auf protected ArrayList von anderer Klasse zugreifen Java Basics - Anfänger-Themen 4
J protected und Standard Sichtbarkeit Java Basics - Anfänger-Themen 2
M Jede Variable als private, protected etc. deklarieren? Java Basics - Anfänger-Themen 7
P protected funktioniert nicht? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben