Methoden aus fremden Klassen verwenden

  • Themenstarter Themenstarter java2000
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

java2000

Gast
Hallo zusammen,
wahrscheinlich handelt es sich hierbei um ein Problem, dass entweder einfach nicht geht oder ganz einfach zu bewerkstelligen ist. Dummerweise komme ich aber einfach nicht auf eine geeignete Lösung.

Ich habe ein Programm geschrieben: myClass1. Eine public class mit einer main und verschiedenen anderen Methoden. Diese Methoden haben verschiedene Funktionen, berechnen Werte, kontrollieren Inputs, speichern und schreiben Textfiles etc. Sie sind alle public und static.
Nun schreibe ich eine Fortsetzung zu diesem Programm: myClass2. Dieses Programm bräuchte genau dieselben Methoden aus myClass1 ebenfalls. Zum einen könnte ich den Code einfach rüber kopieren, das wäre aber eher ungeeignet, weil ich Korrekturen in den Methoden dann immer in beiden Programmen nachbessern müsste. Auch myClass1 ein Package anzuhängen hat nicht optimal funktioniert, weil ich mit myClass2 dann zwar die Methoden verwenden konnte, sich myClass1 aber nicht mehr selbstständig durch den Befehl "java myClass1" ausführen liess.

Mein Ziel ist es, dass myClass1 für myClass2 eine Art Container für Methoden wird, die es dort holen und verwenden kann.
Ich habe gehofft, es gäbe irgendeine Lösung, indem ich in myClass2 einfach schreibe:
myClass1().method1();

Aber das will nicht so richtig funktionieren.

Um eure Hilfe wäre ich sehr froh, danke dass du dir überhaupt Zeit genommen habt, diesen Noob-braucht-Hillfe-Text zu lesen 😉

Gruss
Martin
 
oh je....
du musst noch sehr viel lesen. Schnapp dir ein Einsteigerbuch.
In diesem Fall wohl angebracht:
Code:
MyClass2 extends MyClass1
Allerdings ist dir dringend zu empfehlen dich erst die Konzepte von Vererbung, Objekten und Referenzen einzulesen.
 
Hallo zusammen, Wildcard hat ja schon alles gesagt. Ich möchte noch ein kurzes Code-Beispiel für MyClass1 und MyClass2 anfügen:

Code:
/* MyClass1.java */

public class MyClass1 {
  
  public static void method1() {
    System.out.println("method1");
  }
  
  public static void main (String[] args) {
    method1();
    MyClass2.method2();
  }
}

und

Code:
/* MyClass2.java */

public class MyClass2 extends MyClass1 {
  
  public static void method2() {
    System.out.println("method2");
    method1();
  }
  
}

MyClass1 enthält die main-Methode und die statische Methode method1. MyClass2 enthält method2. Die Methode method2 kann aus der 1. Klasse heraus mit

MyClass2.method2();

aufgerufen weden. Der Aufruf von

method1();

innerhalb der zweiten Klasse ist zulässig, da ja MyClass2 die Klasse MyClass1 erweitert. Die Ausgabe des Beispiels nach "java MyClass1" ist dann:

method1
method2
method1
 
Vielen Dank, es hat geklappt. Dieses "extends" ist mir einfach nicht in den Sinn gekommen. Muss noch viel lernen, ich weiss schon, aber genau das versuche ich hier ja 🙂

Schönen Abend wünsche ich euch noch

Gruss
Martin
 
Hallo zusammen,
ich hatte früher Mal ein ganz ähnliches Problem, nämlich wollte ich eine Oberklasse mit zwe anderen Klassen verbinden. Mit extends funktioniert das aber nicht, gibts es da sonst eine Lösund?
Wenn ich z.B. in einem Programm die Methoden aus einer anderen Klasse classXY und auch noch aus JFrame verwenden möchte, dann funktioniert es nicht mit extends.

LG MAX
 
Hallo nochmal und speziell zum Beitrag von MAXli,

Wenn ich z.B. in einem Programm die Methoden aus einer anderen Klasse classXY und auch noch aus JFrame verwenden möchte, dann funktioniert es nicht mit extends.

Eine Mehrfachvererbung von Klassen ist in Java prinzipiell nicht möglich. Das liegt einfach am Design der Programmiersprache Java. Die Entwickler von Java haben sich dazu entschieden nur eine einfache Vererbung zuzulassen:

public classA extends ClassB

ist als einfache Vererbung zulässig und

public classA extends ClassB, ClassC //Fehler!

wäre als Mehrfachvererbung nicht zulässig.

Auf die Frage, warum eine Merhfachvererbung nicht zulässig ist, wird oft auf Probleme hingewiesen, die bei einer Mehrfachvererbung in der Praxis auftreten können.

Java bietet aber Mehrfachimplementierungen, d.h. eine Klasse kann mehrere Interfaces implementieren. Durch diese Mehrfachimplementierungen können ebenfalls Informationen einer Klasse (ein Interface kann ja als eine bestimmte Form einer Klasse angesehen werden) erhalten werden. Da ein Interface nur die Methoden deklariert und nicht implementiert, also der Methodenkörper leer ist, muss allerdings die implementierende Klasse die entsprechenden Methoden noch ausgestalten.

Es wäre also folgendes zulässig:

public ClassA extends ClassB implements InterfaceX, InterfaceY

mit der definierten Klasse ClassB und den Interfaces InterfaceX und InterfaceY.


Vielleicht noch ein kurzes Code-Beispiel dazu:

Zunächst die Klasse ClassA:

Code:
/* ClassA.java */

public class ClassA extends ClassB implements InterfaceX, InterfaceY {
  
  public int zahlX() {
    return 3;
  }
  
  public int zahlY() {
    return 4;
  }
  
  public static void main(String[] args) { 
    ClassA a = new ClassA();
    int i1 = a.zahlB();
    int i2 = a.zahlX();
    int i3 = a.zahlY();
    System.out.println(i1 + ", " + i2 + ", " + i3);
  }
}

Die Klasse ClassB:

Code:
/* ClassB.java */

public class ClassB {
  
  public int zahlB() {
    return 2;
  }
}

und die beiden Interfaces:

Code:
/* InterfaceX.java */

public interface InterfaceX {
  
  public int zahlX();
}

Code:
/* InterfaceY.java */

public interface InterfaceY {
  
  public int zahlY();
}

Wird z.B. innerhalb von ClassA

public int zahlY() {
return 4;
}

weggelassen, erfolgt eine Fehlermeldung durch den Compiler, da ClassA durch implements InterfaceY der "Zwang" auferlegt wurde die Methode zahlY zu implementieren.
Eine Klasse kann also Informationen aus mehreren Interfaces "erben" - eine Merhfachvererbung von Klassen ist dagegen nicht zulässig.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben