kann ich mehr als eine klasse erweitern? EXTENDS
Thommy
- java
0 Marko0 Johannes Zeller
hallo,
ich möchte mein java-programm, das einem bestimmten socket lauscht in eine webseite als java-applet einbinden.
public class CheckServer extends ServerSocket, Applet
(geht nicht)
habt ihr andere ideen, wie ich die klassenerweiterung machen kann?
Danke und Gruss
Hallo,
Java unterstützt bewußt keine Mehrfachvererbung. In Deinem Fall wäre es wahrscheinlich am besten Checkserver von Applet abzuleiten, und dann der Klasse ein Attribut (eine Variable) vom Typ ServerSocket zu spendieren. Funktionsaufrufe von Serversocket müssen dann halt aus Applet erfolgen, wenn Du wirklich viele Funktionen von ServerSocket von Außen aufrufen willst (was bei Vererbung Applet aber eigentlich garnicht vorkommen dürfte), könntest Du eine Methode: getServerSocket() in CheckServer haben, die eine Referenz auf das Attribut vom Typ Server nach Außen gibt. Hoffe ich hab mich verständlich ausgedrückt.
Gruß
Marko
Hoffe ich hab mich verständlich ausgedrückt.
Naja, eigentlich versteh ich ja nur bahnhof.
Bin Student und arbeite an einem scm-Projekt, aber das tut mal nix zur Sache ;).
Ich habe das Programm, das lauscht vor zwei Stunden bekommen, und mein Praxisbetreuer hat gemeint, ich solle mal gucken, ob ich das in einem Java-Applet zum laufen bekomme.
Dazu muss ich eines sagen:
Ich hab in Java so gut wie keine Ahnung von den Klassen und so weiter, hab bis jetzt nur versucht, die ganze Sache zu verstehen. In der literatur hab ich auch nichts gefunden, womit ich eben mehrere Klassen erweitern kannst.
Ich stell jetzt einfach mal den Code rein:
----------------------------------------------------------------------
import java.io.*;
import java.net.*;
public class CheckServer extends ServerSocket
{
private boolean stop;
public CheckServer (int port) throws IOException
{
super(port);
}
public static void main(String[] args) throws IOException
{
try
{
new CheckServer(Integer.parseInt(args[0])).start();
}
catch(IOException e)
{
System.out.println("kann port nicht oeffnen");
}
}
public void start()
{
stop = false;
//System.out.println("Nach Accept");
while (!stop)
{
try
{
Socket socket = accept();
System.out.println("Nach Accept");
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String o = input.readLine();
System.out.println(o);
System.out.println("Vor Output");
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
output.write("Matz du Wuaschd!");
output.newLine();
output.flush();
output.close();
input.close();
socket.close();
}
catch (IOException e)
{
}
}
try
{
close();
}
catch (IOException e)
{
}
}
public void stop()
{
stop = true;
}
}
----------------------------------------------------------------------
Bin für jede Antwort Dankbar.
Gruss
Hallo,
also wenn ich es recht verstehe, ist Deine Klasse ein Server, das gibt mit einem Applet schonmal das Problem, dass Applets nur Verbindungen mit Ihrem Herkunftsserver aufbauen dürfen. Die Restriktion kann man allerdings in Java2 durchbrechen, aber das führt recht weit, und praktisch gemacht habe ich es auch noch nicht.
Dann ist ein Applet eine grafische Komponente, also müsstest Du die Ergebnisse irgendwie mit GUI Elementen (z.B. in einem Textfeld) darstellen. Momentan machst Du ja nur Konsolenausgabe (geht zwar auch, macht man aber bei Applets nur für Debug und Fehlermeldungen).
Zu Deinem grundsätzlichen Ausgangsproblem, nicht Durch Vererbung aus dem Server ein Applet machen, sondern mach erst ein Applet, probier das ruhig mal vorher aus, und baue dann die Serverklasse als Variable im Applet ein. Aber irgendwie muss ich Dir ehrlich sagen, arbeite Dich erstmal noch etwas allgemein in Java ein, momentan hast Du Dir noch etwas viel für den Anfang vorgenommen :-) Nimm ein gutes Buch zur Hand und lerne Java von Grund auf (Klassen, Objektorientierter Programmierstil, Bau von grafischen Oberflächen) bevor Du dich an Netzwerkanwendungen wagst.
Gruss
Marko
Hallo nochmal,
hab nochwas vergessen:
In der literatur hab ich auch nichts gefunden, womit ich eben mehrere Klassen erweitern kannst.
Es geht auch definitiv nicht, Du kannst in Java immer nur von einer Klasse erweitern.Das meinte ich mit Mehrfachvererbung gibt es nicht.
Gruss
Marko
Hi
public class CheckServer extends ServerSocket, Applet
(geht nicht)
AFAIK gab es am Anfang die Überlegung Klassen von mehreren Klassen ableiten zu können (wie z.B. in C++). Das führt jedoch zu einigen Problemen, z.B. wenn beide Klasse eine Funktion selben Namens mit denselben Parametern haben. Deshalb kann eine Java-Klasse nur eine Elternklasse haben. Es können jedoch mit implements sogenannte Interfaces eingebunden werden. Das ist eine Abart der abstrakten Klassen, d.h. es können nur Felder und Methoden ohne Rumpf definiert werden.
Eine Klasse muss deshalb Methoden eines eingebunden Interfaces überschreiben. Der Sinn der Sache ist es, dass ganz unterschiedliche Klassen trotzdem gewisse gleiche Eigenschaften haben und so gleich behandelt werden könenn.
habt ihr andere ideen, wie ich die klassenerweiterung machen kann?
Die Idee mit den Interfaces macht bei dir so glaube ich keinen Sinn. Vielleicht kann die jemand anderes eine Lösung für dein Problem sagen.
Schöne Grüße
Johannes
Hi,
AFAIK gab es am Anfang die Überlegung Klassen von mehreren Klassen ableiten zu können (wie z.B. in C++). Das führt jedoch zu einigen Problemen, z.B. wenn beide Klasse eine Funktion selben Namens mit denselben Parametern haben.
Und das ist in Java IMMER der Fall, da ALLE Klassen immer java.lang.Object als oberstes Element der Ableitungshierarchie haben...
cu,
Andreas
Hi Andreas
Und das ist in Java IMMER der Fall, da ALLE Klassen immer java.lang.Object als oberstes Element der Ableitungshierarchie haben...
Das verstehe ich nicht ganz. Wenn ich eine Klasse1 definiere ohne sie von irgendetwas abzuleiten, dann ist die Objekthierarchy ganz einfach java.lang.Object > Klasse1. Wenn ich eine Klasse2 von Klasse1 ableite sieht die Ableitungshierarchie AFAIK so aus: java.lang.Object > Klasse1 > Klasse2. Klasse2 wird also nicht direkt aus Objekt abgeleitet.
Schöne Grüße
Johannes (Man möge mich korrigieren)
Hi,
Hi Andreas
Und das ist in Java IMMER der Fall, da ALLE Klassen immer java.lang.Object als oberstes Element der Ableitungshierarchie haben...
Das verstehe ich nicht ganz. Wenn ich eine Klasse1 definiere ohne sie von irgendetwas abzuleiten, dann ist die Objekthierarchy ganz einfach java.lang.Object > Klasse1. Wenn ich eine Klasse2 von Klasse1 ableite sieht die Ableitungshierarchie AFAIK so aus: java.lang.Object > Klasse1 > Klasse2. Klasse2 wird also nicht direkt aus Objekt abgeleitet.
Hab ich ja auch nicht behauptet, daß alle Klassen direkt von java.lang.Object abgeleitet seien.
Sondern nur, daß als OBERSTES Element der Ableitungshierarchie immer java.lang.Object steht.
cu,
Andreas
Hi Andreas
Hab ich ja auch nicht behauptet, daß alle Klassen direkt von java.lang.Object abgeleitet seien.
Sondern nur, daß als OBERSTES Element der Ableitungshierarchie immer java.lang.Object steht.
Da hab ich da wohl was reininterpretiert was nicht stimmte. Tut mir leid.
Weiterhin schöne Grüße
Johannes