Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi Leute,
ich hab mal testweise 2 Interfaces und eine Klasse erstellt.
I1, I2 und C1
I2 erbt von I1 und C1 implementiert I2.
Daraufhin habe ich in der Klasse C1 einen int number erstellt.
Beim Aufruf der Methode aus I1 soll number auf -1 gesetzt werden.
Beim Aufruf der Methode aus I2 soll number auf den beim Methodenaufruf angegebenen Wert gesetzt werden.
Code:
package vueb;
public interface I1 {
public static void m1() {
int number = -1;
}
}
package vueb;
public interface I2 extends I1{
public static void m2(int i) {
int number = i;
}
}
package vueb;
public class C1 implements I2{
public static void main(String[] args){
int number;
I1.m1();
System.out.println(number);
}
}
Wenn Du objektorientiert arbeiten willst, vergiss static. Statische member existieren auf Typebene und eben nicht auf Objektebene. Auch ist mit statischen Methoden keine Polymorphie möglich.
Ein Interface deklariert lediglich die Methoden, implementiert sie aber nicht. Das ist dann Aufgabe der Klasse.
In der main() deklarierst du eine Variable "number", der nie etwas zugewiesen wird. Die anderen Variablen "number", die in m1() und m2() deklariert werden, sind nur innerhalb der Methoden gültig.
Insgesamt gibt es also drei unabhängige Variablen mit dem Namen "number".
Ich versteh immer noch nicht wie ich jetzt meine Idee umsetzen kann. Also was muss ich machen damit ich die Methode zb in der Main Klasse aufrufen kann und somit den Wert ändern kann und dementsprechend Printen kann.
Die Interfaces geben lediglich vor, welche Methoden implementiert werden sollen. Diese geben aber eben nicht vor, was die Methode macht! Also die Interfaces würden so aussehen:
Code:
public interface I1 {
void m1();
}
public interface I2 extends I1{
void m2(int i);
}
Nun kann die Klasse dieses Interface implementieren:
Code:
public class C1 implements I2
private int number;
public void m1() {
number = -1;
}
public void m2(int i) {
number = i;
}
}
Ach ja stimm genau. Da es ja für jede Klasse unterschiedlich sein kann. Dann ergibt sich mir aber die Frage, wozu ich ein Interface brauche wenn ich eh in jeder Klasse dann die Methode die ich bereits in den Interfaces gesetzt habe neu definieren muss
Dann ergibt sich mir aber die Frage, wozu ich ein Interface brauche wenn ich eh in jeder Klasse dann die Methode die ich bereits in den Interfaces gesetzt habe neu definieren muss
Ein Interface kannst Du als Spezifikation betrachten: es sagt dem Nutzer, wie es ein Objekt verwenden kann, das die Schnittstelle implementiert. Es geht also gerade darum, die Sache unabhängig von der Implementierung zu betrachten.