Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Java Grundlagen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Java Grundlagen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Badmann33
unregistriert
Java Grundlagen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo alle zusammen habe gerade Probleme bei dieser Aufgabe die Lücken auszufüllen:

b2) würde ich sagen :


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
public final static getInstance(){
if(instance==null){
instance = new Zoo(CentralParkZoo);
}
return instance;
}



1: soll ich in 1 Lücke da einfach private schreiben?
Was schreibe ich in die 2te c1 Lücke?

Badmann33 hat diese Bilder (verkleinerte Versionen) angehängt:
x1-iloveimg-resized.png x-iloveimg-resized.png

06.12.2017 22:27
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo Badmann33,

b2 ist fast richtig. Du übergibst jedoch keinen String an den Konstruktor. Das solltest Du ändern.

Auf dem Blatt sehe ich zwei Fehker. Der Konstruktor ist nie static. Es soll ja Zoo auch nur einmal geben können. Daher darf man den Konstruktor auch nicht beliebig aufrufen können. Der Konstruktor muss also private sein. Das stellt sicher, dass er nur von Methoden in der selben Klasse aufgerufen werden kann. Deswegen gibt es die Methrode getInstance().

Weiterhin sollte der Name nicht public sein. Sonst könnte ja jeder von außen den Namen des Zoos ändern (Geheimnisprinzip).

Zur Lücke c1-1: Die Klasse Dog soll doch nicht unsichtbar sein. Private Klassen braucht man eigentlich nur, wenn man Klassen in Klassen definiert, die von Außen nicht sichtbar sein sollen. public tut es hier also. Wenn die Klasse jedoch eine abstrakte Methode enthalten soll muss die Klasse auch abstrakt sein. D.h. in die erste Lücke muss "public abstract".

Die weite Lücke soll eine Methode deklarieren, welche nur von den Kindklassen aus sichtbar ist und abstrakt ist -> "protected abstract"

Besten Gruß,

Karlito
07.12.2017 12:06 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Badmann33
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ist dann die Methode getName in der c1) 2 Lücke auch dann public abstract ?

Nach der Aufgabenstellung würde ich private sagen?

c2 Ausgabe : Zoo.name

Richtig?
07.12.2017 14:58
Badmann33
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Noch jemand da ?

Sind meine Ideen richtig ?
08.12.2017 22:22
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nee, in der Aufgabenstellung steht drin, dass nur in abgeleiteten Klassen auf getName() zugegriffen werden darf. public würde das ja von überall aus erlauben. Du musst hier also protected (und abstract so wie so) verwenden.
Das mit dem Zoo-Namen ist so ne Sache:
Erstens ist auf jeden Fall falsch, ein großes "Z" zu nehmen, weil das ja die Klasse Zoo dann wäre und Du aber den Namen der Zoo-Instanz haben möchtest, der in der Dog-Membervariablen zoo gespeichert ist. Also wäre zoo.name richtig.
Wenn Du aber den (an sich guten) Rat von Karlito befolgst und die Variable name private deklarierst, dann geht das auch nicht. Normalerweise macht man die Membervariablen nie public und führt dann eher getter- und setter-Methoden dafür ein, falls es von außen zugänglich sein muss. So hat man dann die Kapselung aufrecht erhalten und kann getter und setter passend verändern, wenn sich das Datenmodell ändert, oder auch weitere Zugriffsbedingungen/-überprüfungen einbauen, etc.
Man würde also typischerweise in Zoo die Membervariable name als private deklarieren und dafür eine
code:
1:
2:
3:
public String getName() {
  return name;
}
einführen, die man dann auch in der Dog-Klasse aufrufen kann.
Allerdings glaube ich fast, dass es die Aufgabe anders haben will und der name in Zoo public deklariert werden soll. Oder vielleicht Package-private (also ohne Sichtbarkeits-Angabe). Zumindest so, dass Du auf name auch von Dog aus zugreifen kannst. Sonst hätten wie wahrscheinlich schon noch die getter-Methode in der Zoo rein geschrieben.

Gruß
Marco
10.12.2017 12:07 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Badmann33
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ok danke für deine schöne Erklärung .

Jetzt zu d1)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
Animal dog = new Husky( zoo.getInstance());
dog.hello();

Husky::Dog?






Da mit dem erben bin ich mir nicht so sicher großes Grinsen
11.12.2017 13:02
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Probiers doch einfach aus! Gib alles in eine Entwicklungsumgebung ein und versuche es zu kompilieren!

zoo ist ein Objekt und Zoo ist eine Klasse. Wenn Du eine statische Methode aufrufen willst, machst Du das normalerweise über die Klasse, nicht über ein Objekt. Außerdem gibt es an der Stelle überhaupt das Objekt zoo?

Was die letzte Zeile bedeutet, verstehe ich nicht.

Gruß
Marco
11.12.2017 20:38 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Badmann33
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:

Animal dog = new Husky( Zoo.getInstance());




Es kann eigentlich nur sein ?

Die letzte Zeile ist komplett leer und soll von uns gefüllt werden großes Grinsen

Da habe ich aber ehrlich auch keine Idee großes Grinsen
11.12.2017 20:47
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo!

Das ist, denke ich, zwar so weit richtig, aber Du musst die Klasse Husky wohl erst noch "machen". Dazu sind in der d2 und d3 ein paar Angaben gemacht.
In d2 sollst Du erst einmal eine Klasse anlegen, die alles von Dog erbt. In der d3 sollst Du den Konstruktor von Husky in der Art machen, dass der von Dog aufgerufen wird und der übergebene Zoo weitergereicht wird.
Ich kann Dir nur wieder den Tipp geben: Tippe die paar Zeilen Quelltext ab und probiere selbst, ob es Syntaxfehler gibt! Erstens weißt Du so am ehesten, ob es wenigstens syntaktisch richtig ist, und außerdem lernst Du so am meisten, weil Du etwaige Fehler direkt selbst sehen und korrigieren kannst.

Gruß
Marco
12.12.2017 09:37 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Java Grundlagen