PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Objekt versch. Klassen



chiefwiegam
09-06-2006, 17:12
hi,

ich versuche ein Applet zu schreiben, welches über Sockets kommuniziert und dabei entweder Server oder als Client argiert.
Um das Hauptprogramm eifach zu halten habe ich mir überlegt, dass ich die Unterklassen "Server" und "Client" schreibe welche die gleichen Methoden enthalten und dann je nachdem ob es sich um ein einen Server handelt ein Objekt "com" der jeweiligen Klasse erzeuge. Das Objekt ist also entweder der Art "Server" oder "Client" das wird beim Programmstart entschieden.



switch (x)
{
case 1: Server com = new Server();
break;
case 2: Client com = new Client();
break;
}

Die obigen Zeilen funktionieren jedoch nicht.
Weiss jemand wie man das Problem lösst?

gruss markus

bischi
09-06-2006, 17:20
Was sagt genau die Fehlermeldung?

MfG Bischi

chiefwiegam
11-06-2006, 10:14
Hi,

habe mein Beispielprogramm mal als Anhang beigelegt.
Das Applet berechnet je nachdem wie die Checkboxes setzt eine andere mathematische Operation (Addition, Subtraktion und Multiplikation).

Die ersten 3 Fehler, die der Klasse addi kommen in der glichenform auch bei sub und multi vor. Die ungekürzte Compilerausgabe ist im Anhang.


.\addi.java:3: ';' expected
public double calc(int a, int b)
^
.\addi.java:8: 'class' or 'interface' expected
}
^
.\addi.java:9: 'class' or 'interface' expected

^

C:\javaprog\poc\main.java:31: operate is already defined in paint(java.awt.Graphics)
case 2: sub operate = new sub();
^
C:\javaprog\poc\main.java:33: operate is already defined in paint(java.awt.Graphics)
case 3: multi operate = new multi();
^
C:\javaprog\poc\main.java:37: cannot resolve symbol
symbol : variable operate
location: class main
g.drawString("" + operate.calc(a,b), 30,30);
^
.\addi.java:3: missing method body, or declare abstract
public double calc(int a, int b)
^
.\sub.java:3: missing method body, or declare abstract
public double calc(int a, int b)
^
.\multi.java:3: missing method body, or declare abstract
public double calc(int a, int b)
^
15 errors

Tool completed with exit code 1


gruss markus

chiefwiegam
11-06-2006, 10:15
Anhang vergessen.

Boron
11-06-2006, 10:16
Nur mal so einen Schuß ins Blaue:
- Zum Ersten sind die neu angelegten Objekte nur im aktuellen Gültigkeitsbereich gültig (zwischen den geschweiften Klammern) und außerhalb nicht mehr.
- Zum Zweiten wäre es dann ganz sinnvoll, wenn du auf Polymorphie setzt

Das könnte dann bei dir so aussehen:
Oberklasse com;
switch (x)
{
case 1:
com = new Server();
break;
case 2:
com = new Client();
break;
default:
// eventuelle Fehlermeldung?
break;
}

chiefwiegam
11-06-2006, 11:05
danke, mit polymorphie funktionierts.

gruss markus

Boron
11-06-2006, 11:47
Solltest du noch nicht wissen, was "Polymorphie" bedeutet, dann informiere dich darüber (Polymorphie bedeutet Vielgestaltigkeit.)
Es ist nämlich ein essentieller Aspekt einer objektorientierten Sprache, also auch Java.

Sehr vereinfachte Kurzfassung:
Ein Objekt kann durch ein gleichartiges Objekt ersetzt werden.

Bsp:
Du hast die Oberklasse Hund und die davon abgeleiteten Klassen Pudel und Dackel.
Wenn du nun ein Hund-Objekt anlegst Hund meinHund; dann kann der Hund entweder ein Pudel oder ein Dackel sein:
meinHund = new Pudel;
meinHund = new Dackel;