PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vererbung&Java


Hannnibal
2003-11-17, 17:29:05
Hi,
es ist eigenlich ganz simpel (eigentlich:kratz2: ).
Also fangen wir mal an.
Ich habe ein klasse
person, attribute zb name,
dann gibt es eine klasse dozent in der ein objekt "veranstalltung" gespeichert wird.
Wenn ich jetzt in der main eine person erstelle
(person d1 = new person(name,veranst.)
kann ich nicht auf die getter der dozentklassezugreifen, warum?
Der const in der person sieht so aus :
public Person(String kd_name, Veranstaltung v) {
setName (kd_name);
Dozent kx =new Dozent (v);
}

Weiterhin habe ich das problem das ich zb in der dozent klasse ein objekt veranstaltung erzeugen kann aber nicht auf die getter oder setter komme :(.
über etwas entwicklungshilfe würde ich mich sehr freuen :) .
mfg

HellHorse
2003-11-17, 17:50:02
Weil deine Variable vom Typ Person ist, und du in der Klasse Person keine Accesoren dafür definiert hast.

Auf Deutsch:
Dozenten verhalten sich wie Personen. Nicht umgekehrt.

Hannnibal
2003-11-17, 17:57:11
Hi,
Danke, wie stelle ich das denn am besten an das ich zugriff auf beide klassen von der main aus habe?
mfg

Lord Nikon
2003-11-17, 18:41:03
am einfachten ist es, wenn du dir Objekte der Klasse erstelltst.

Xmas
2003-11-17, 18:42:33
Original geschrieben von Hannnibal
Der const in der person sieht so aus :
public Person(String kd_name, Veranstaltung v) {
setName (kd_name);
Dozent kx =new Dozent (v);
}

Was ist das denn? Du deklarierst im Konstruktor eine lokale Variable kx, weist ihr ein neues Dozent-Objekt zu und dann endet der Konstruktor, womit die lokale Variable und das Objekt wieder gelöscht werden. Mit anderen Worten, die Zeile ist überflüssig.

Ich würde so etwas vorschlagen (nicht getestet):

class Person {
protected String name;

public Person(String n) { name = n; }
// ...
}

-----
class Dozent
extends Person {
protected Veranstaltung veranstaltung;

public Dozent(String n, Veranstaltung v) {
super(n);
veranstaltung = v;
}
// ...
}

Hannnibal
2003-11-17, 19:14:03
Hi,
was das ist weiß ich selber nicht so recht *chatt*.
In c++ hätte ich es so geschrieben
person (name,veranst.):dozent(veranst.)
Er soll am const erkennen um welche person es sich handelt...
Was macht genau das super(n)?
thx

Xmas
2003-11-17, 22:15:37
super(n) ruft den Konstruktor der Klasse, von der abgeleitet wurde (also Person) mit Parameter n auf.

Ich verstehe nicht warum du Dozent ein Teil von Person machen willst. Schließlich ist doch nicht jede Person ein Dozent, also musst du Dozent von Person ableiten.

Hannnibal
2003-11-17, 22:40:39
Hi,
ja dozent ist von person abgeleitet, außerdem gibt es noch kunde(ebenfalls extends person).
Es geht mir nicht um die logik sondern einfach nur die syntax, und wie ich eine person im main programm erzeugen kann die dozent ist und alle methoden beider klassen verfügbar sind.
Im javabuch ist das const. problem recht knapp angerissen, aber nicht ausführlicher erläutert.
Auf jeden fall danke schonmal für die hilfe :).
Ich kann ja mal die quelldateien reinstellen, ist aber ziemliches wirr warr.
mfg

HellHorse
2003-11-17, 23:23:44
Original geschrieben von Hannnibal
Hi,
Danke, wie stelle ich das denn am besten an das ich zugriff auf beide klassen von der main aus habe?
mfg
Falls sie im gleichen Paket liegen, musst du gar nichts machen. Sonst musst du sie importieren oder explizit angeben mit paket.Klassennname .

Hannnibal
2003-11-18, 00:02:17
Hi,
java.lang.Error: Unresolved compilation problems:
The method getVeranstaltung() is undefined for the type Person

http://home.t-online.de/home/bullitt667/smilies/data/uglyconfused2.gif
Sind im gleichen packet...
Sie sin auch natürlich public.
Ich komme nur auf die fkt die der datentyp deklariert ist, obwohl es noch einen sohn gibt, dozen getVeranst....
ich verdächtige ja meine "primitoiven" const., kann mich aber auch gut irren.
mfg

Gast
2003-11-18, 00:13:44
Willst du einen Dozenten instanziieren, dann musst du das mit new Dozent(...) tun. Der kennt dann auch die getVeranstaltung(). Ich weiß nicht, was du mit den Konstruktoren meinst??? Dozent(...) ist der für Dozenten und Person(...) der für Personen. Wo ist das Problem? Natürlich kannst du keinen Dozenten über den Personen-Konstruktor erzeugen, oder was genau ist jetzt das Problem?
Also: Dozent dozi=new Dozent(...) und Person persi=new Person(...). dozi kennt dann alles von Person.

HellHorse
2003-11-18, 20:26:27
Original geschrieben von Hannnibal
Hi,
java.lang.Error: Unresolved compilation problems:
The method getVeranstaltung() is undefined for the type Person

http://home.t-online.de/home/bullitt667/smilies/data/uglyconfused2.gif
Sind im gleichen packet...
Sie sin auch natürlich public.
Ich komme nur auf die fkt die der datentyp deklariert ist, obwohl es noch einen sohn gibt, dozen getVeranst....
ich verdächtige ja meine "primitoiven" const., kann mich aber auch gut irren.
mfg
Das steht zwar da, aber du hast bestimmt die getVeranstaltung() in der Klasse Dozent, und nicht in der Klasse Person definiert.
Ist deine Variable von Typ Person, kannst du der nur Nachrichten senden, die Person versteht. Dabei spielt es keine Rolle ob das Objekt auf den die Varible zeigt nun vom Typ Person oder Dozent ist.

Falls du ein Problem mit strenger Typisierung hast, versuche mal Smalltalk.