geht oder geht nicht?

Need_Help1993

Bekanntes Mitglied
Ich habe folgende Klassen gegeben:
Java:
 class ClassA {
public int x = 0;
private String y = "none";
public static boolean b = false;

public String getY(){
return y;
}

private void doStuff(){
//...
}
}
und
Java:
class TestclassB extends ClassA
{
private int z = 0;

public void test()
{
//HIER EINFÜGEN
}
}

in der Testklasse soll bei //Hier einfügen folgende Anweisungen eingefügt werden:
1. X = 1;
2. b = true;
3. String s = getY();
4. doStuff();
5. y = "abc"
6. z = 1;

jetzt soll ich sagen, ob die zulässig sind oder nicht.

ich habe schonmal ausprobiert und soweit ich kann die Anweisungen analysiert.
1. zeigt keine Fehler beim compilieren
2. scheint einwandfrei zu funktionieren
3. the local variable is never read ( was heißt das? --- ist nur eine Empfehlung)
4. Attribut ist private, also kann die Methode nicht drauf zugreifen
5. Attribut ist private, also kann nicht darauf zugegriffen werden
6. scheint auch zu gehen?

stimmt das soweit bzw. was passiert bei 3.
 
Zuletzt bearbeitet von einem Moderator:
1. zeigt keine Fehler beim compilieren
das bezweifel ich ;-) Zumindest, wenn die Zeile 1 so im Code steht. Java unterscheidet zwischen Groß- und Kleinschreibung x vs. X
3. the local variable is never read ( was heißt das? --- ist nur eine Empfehlung)
ist ein Hinweis, dass die Variable nirgends gelesen wird und daher mit hoher Wahrscheinlichkeit nicht benötigt wird.
Abgesehen, dass 4 und 5 wie selbst festgestellt nicht geht, fehlt in Zeile 5 noch der Semikolon am Ende - eventuell ein Übertragungsfehler.
 
this methode requires a body instead of a semicolon zeigt er mir an, wenn ich da ein Semikolon setzte.

also
1, 2 gehen
3. geht, macht aber kein sinn
4 5 gehen nicht
6. geht
 
Zuletzt bearbeitet von einem Moderator:
jetzt haben wir das ganze Spielchen noch für "fortgeschrittene", und da steige ich nichtmehr so genau durch....

Klasse A und B bleiben bestezen.
hinzu kommt Klasse C
Java:
 class TestclassC //(müsste hier nicht noch extends ClassA stehen?)
{
void other()
{
ClassA inst = new ClassA();
//hier einfügen

}
}

1. TestclassB.x = 1;
2. ClassA.b = true;
3. doStuff();
4. inst.x = 1;
5. inst.test();
6. x = 1;

3. dürfte immer noch nicht gehen wegen dem private
6. müsste funktionieren

aber beim rest habe ich keinen blassen schimmer...
 
Zuletzt bearbeitet von einem Moderator:
Ich nehme mal an, dass TestclassC absichtlich nicht von einer der anderen Klassen erbt.
Dann gilt:
3. geht nicht weil diese Klasse keine solche Methode besitzt
6. geht nicht weil diese Klasse keine solche Intanzvariable besitzt.

Beim Rest darfst Du noch ein bisschen überlegen. Was sind denn Deine Vermutungen?
 
also wenn Testklasse c nicht erbt würde ich mal vermuten, dass
1. geht, weil x = 1 in Testklasse B funktioniert hat, und wenn wir das jetzt aus Testklasse c aufrufen müsste es ja auch funktionieren
2. müsste gehen, weil wir uns ja direkt auf Klasse A beziehen, und der booelan dort public ist
4. ich weiß nicht wofür inst steht, also habe ich da echt keinen blassen schimmer.... aber weil x = 1 oben schonmal funktioniert hat würde ich sagen der geht nicht (ich weiß ist ziemlich abenteuerlich 😀 )
5. könnte irgendwas mit der new A methode zu tun haben und könnte meiner ansicht nach vill. funktionieren
 
Zuletzt bearbeitet von einem Moderator:
also wenn Testklasse c nicht erbt würde ich mal vermuten, dass
1. geht, weil x = 1 in Testklasse B funktioniert hat, und wenn wir das jetzt aus Testklasse c aufrufen müsste es ja auch funktionieren
2. müsste gehen, weil wir uns ja direkt auf Klasse A beziehen, und der booelan dort public ist
4. ich weiß nicht wofür inst steht, also habe ich da echt keinen blassen schimmer.... aber weil x = 1 oben schonmal funktioniert hat würde ich sagen der geht nicht (ich weiß ist ziemlich abenteuerlich 😀 )
5. könnte irgendwas mit der new A methode zu tun haben und könnte meiner ansicht nach vill. funktionieren
Scheint als sind Dir die Bedeutung von und der Umgang mit Instanzvariablen, statischen Variablen und Objekten noch nicht so ganz klar ;-)
1. geht nicht, weil hier versucht wird statisch auf eine Instanzvariable zu zugreifen
2. geht, aber Deine Begründung ist nicht ganz korrekt
4. inst ist eine Variable die auf ein Objekt vom Typ ClassA referenziert welches in dem Code zuvor erzeugt wird. und obwohl x = 1 oben nicht funktioniert hat ;-) funktioniert es hier, da über eine Objektinstanz auf die öffentliche Variable zugegriffen wird.
5. funktioniert nicht, da in ClassA keine Methode test() definiert ist.
 
this methode requires a body instead of a semicolon zeigt er mir an, wenn ich da ein Semikolon setzte.

Also sowas sagt er z.B. wenn du in so einer normalen Klasse schreibst:
Code:
public void test();

So eine Methode braucht immer einen "body" begrenzt durch { und }. Die Fehlermeldugn sagt dir ja, dass diese body fehlt und stattdessen an der Stelle ein Semikolon ist...

Gruß, Thomas
 
du scheinst mir äußerst kompetent, darum würde ich dich bitten mal kurz hier drüber zu schauen:
aufgabenstellung ist folgende:
Entwerfen Sie eine Beispielklasse, die mindestens zwei nicht-statische Attribute, ein
statisches Attribut und eine beliebige Methode enthält. Die Klasse soll dabei an ein
real existierendes Konzept angelehnt sein. Stellen Sie sicher, dass das statische Attribut tatsächlich ein
Attribut darstellt, das in Ihrem Beispiel nur einmal global für die gesamte Klasse ge-
speichert werden muss. Implementieren Sie die Klasse. Der Methodenrumpf darf leer
sein.
Java:
public class Haus {

static int hausnummernCounter = 1; //setzt einen static Wert
int hausnummer; //Hausnummer

int grundfläche; //Grundfläche des gesamten Hauses

String besitzername; //Name des Besitzers

public Haus() {
hausnummer = hausnummernCounter++; //dient dazu die Hausnummer festzulegen (zählt)
}

public String getBesitzername(){ //getter Methode
return besitzername; //gibt den Namen des Hausbeitzers zurück
}
}

passt das soweit? .... mit dem static bin ich mir in meiner Klasse hier ziemlich unsicher....
 
Zuletzt bearbeitet von einem Moderator:
du scheinst mir äußerst kompetent, darum würde ich dich bitten mal kurz hier drüber zu schauen:
aufgabenstellung ist folgende:
Entwerfen Sie eine Beispielklasse, die mindestens zwei nicht-statische Attribute, ein
statisches Attribut und eine beliebige Methode enthält. Die Klasse soll dabei an ein
real existierendes Konzept angelehnt sein. Stellen Sie sicher, dass das statische Attribut tatsächlich ein
Attribut darstellt, das in Ihrem Beispiel nur einmal global für die gesamte Klasse ge-
speichert werden muss. Implementieren Sie die Klasse. Der Methodenrumpf darf leer
sein.
Java:
public class Haus {
	
    static int hausnummernCounter = 1; 			//setzt einen static Wert 
    int hausnummer;							    //Hausnummer
    
    int grundfläche;							//Grundfläche des gesamten Hauses
    
    String besitzername; 						//Name des Besitzers
 
    public Haus() {
        hausnummer = hausnummernCounter++; 		//dient dazu die Hausnummer festzulegen (zählt)
    }
    
    public String getBesitzername(){ 			//getter Methode
    	return besitzername;					//gibt den Namen des Hausbeitzers zurück
    }
}
passt das soweit? .... mit dem static bin ich mir in meiner Klasse hier ziemlich unsicher....

Wir sind hier (beinahe) alle kompetent 😉
ja, deine Klasse passt so. Sollte auch einwandfrei funktionieren.

EDIT: Man kanns natürlich auch etwas "sinnvoller" machen:

Java:
public class Haus {
	
    static int hausnummernCounter = 1; 			//setzt einen static Wert 
    int hausnummer;							    //Hausnummer
    int grundfläche;							//Grundfläche des gesamten Hauses
    String besitzername; 						//Name des Besitzers
 
    public Haus(String besitzer, int flaeche) {
        hausnummer = hausnummernCounter++; 		//dient dazu die Hausnummer festzulegen (zählt)
        // Umlaute sollte man nicht im Code verwenden, da gibts öfters mal Probleme mit 
        grundfläche = flaeche;
        besitzername = besitzer;
    }
    
    public String getBesitzername(){
        // Wenn du "besitzername" nichts zuweißt, dann wird das von Java mit null initialisiert
        // Daher auch die Parameter im Konstruktor  
    	return besitzername;					//gibt den Namen des Hausbeitzers zurück
    }
}
 
Zuletzt bearbeitet:
na das ist ja lustig 😀
naja ... aber ich versuche wenigstens es selbst zu machen soweit es geht., und an meinen defiziten zu arbeiten
unser herr kollege hat für nen statischen wert nichtmal static eingetragen.... ich denke das sagt alles 😉

woher kennst du den den guten mann? 😀
 
Zuletzt bearbeitet von einem Moderator:
Also, ich würd zu simpleren Variablen und Methoden greifen. Als Methode vll "bauHaus()", da das wirklich bei jedem Haus Verwendung findet. Zwar braucht man auch den Besitzernamen, aber kein gutes Beispiel meiner Ansicht nach.
Variablen hast du schon zwei gute Sachen genannt, als statische würde ich was andres nehmen, was viel allgemeineres. Z.B. häuserCounter(wie viele Häuser gibts auf der Welt), höhenMaximum(höchste bisher erreichte Höhe bei einem Haus) oder ieine Eigenschaft, die wirklich jedes Haus hat. Vll. iein Grunsatz, wie z.B. ... ähhm... öööh.... ich überleg jetzt schon ne ewigkeit, aber nicht jedes Haus hat Vierecken. Es gibt, glaub ich, auch kein gesetztes Maximum an Wohnsitzen oder Fenstern. Haus ist da vll. ein schwieriges Beispiel für so ne statische Eigenschaft, aber dann nimm einfach isonen Counter, wie schon vorgeschlagen 😉 Bei Auto könnte man vll. sagen "public static int ageMinimum = 18", vll geht das ja auch beim Haus, da kenn ich mich mit den Gesetzen nicht so aus :/

Gruß, Thomas
 
Ich habe nach der Aufgabenstellung gegoogelt. Was übrigens zu beachten ist: Tutoren können auch googeln 😉

klar, aber wie du siehst bin ich da auch nicht alleine....
und was soll ich den amchen, wenn ich nicht weiter weiß? ich lasse mir ja nicht den gesamten code von anderen schreiben, sondern frage nur bei problemen nach einzelnen teillösungen, damit ich weiter machen kann 🙂
 
nach dem ändern auf den verbesserten source code habe ich gerade ein kleines problem mit meiner Unterklasse

Java:
 class Wohnung extends Haus //Klasse Wohnung erbt von Klasse Haus
{
static int gesamtanzahl_der_wohnungen; //static Wert auf die Anzahl der Wohnungen in dem Haus
}

er zeigt mir die Fehlermeldung:
Must define an explizit constructor
 
Zuletzt bearbeitet von einem Moderator:
Wenn die Oberklasse keinen default-Konstruktor hat, dann musst du einen angeben:
Java:
class Wohnung extends Haus {
  public Wohnung(String besitzer, int flaeche) {
    super(besitzer,flaeche);
  }
}
Aber wie Marco schon in dem anderen Thread geschrieben hat: das Beispiel ergibt nur bedingt Sinn.
Außerdem sollte man auch nur in einem Thread darüber reden.
 
Wenn die Oberklasse keinen default-Konstruktor hat

[klugs******mode]
Womit gemeint ist: Wenn die Oberklasse keinen Konstruktor ohne Parameter hat. Ja, der Default-Konstruktor ist ein Konstruktor ohne Parameter, aber andersherum ist ein explizit geschriebener Konstruktor ohne Parameter kein Default-Konstruktor - selbst dann nicht, wenn er tatsächlich keine Anweisungen in seinem Rumpf hat. (Ist ne Sache der Terminologie)
[/klugs******mode]

XHelp, dieser Post soll dich nicht zurecht weisen, sondern verhindern dass der TO vllt glaubt dass er in der Kindklasse generell einen eigenen Konstruktor schreiben muss, wenn er in der Oberklasse einen definiert hat (der halt dann vllt gar keinen Parameter hat). Mir ist klar, dass du das weißt 😉
 
Zuletzt bearbeitet:

Zurück
Oben