Implementierung von Interfaces -> Problem mit main

freakdran

Mitglied
Hallo,

ich bin gerade mit Kommilitonen am diskutieren wie genau eine unserer Aufgaben gelöst werden soll.

Wir haben ein Interface bekommen
Java:
public interface StringToolkit {
	
	/**
	 * Diese Funktion akzeptiert einen String original als Parameter und liefert 
	 * einen neuen String als Ergebnis, in dem alle Buchstaben des ursprünglichen 
	 * Strings in Großbuchstaben umgewandelt enthalten sind. 
	 * Gewandelt werden die Buchstaben a bis z und die Umlaute ä, ö und ü. 
	 * Beispiel: "Viel Erfolg bei der Aufgabe!" wird umgewandelt in 
	 * "VIEL ERFOLG BEI DER AUFGABE!".
	 */
	String toUpper(String original);
}
und sollen eben das Beschriebene als Methode (ohne Schleifen, nur Rekursion) schreiben und dazu wie eigentlich immer eine main-Funktion.
Jetzt haben wir das Problem, dass wir nicht wissen ob wir das Interface direkt beim erstellen der Klasse implementieren sollen was zu
Java:
public class StringToolkitImpl implements StringToolkit {

	@Override
	public String toUpper(String original) {
		
		return null;
	}
}
führt oder es selbst schreiben sollen, was zum zum gleichen Ergebnis führt, bis auf Zeile 4, in der wir bisher immer ein "public static ..." benutzt haben.

Wenn wir die erste Variante benutzen zeigt es uns mit
Java:
public static void main(String[] args) {
...

println(toUpper(original));
}
den Fehler "Cannot make a static reference to the non-static method toUpper(String) from the type StringToolkitImpl" mit quick fix "change toUpper to static". Wenn wir das machen zeigt und toUpper() den Fehler "This static method cannot hide the instance method from StringToolkit" an und falls wir nur "public void main(...)" schreiben funktioniert alles Fehlerfrei.

Wenn wir alles selbst schreiben funktioniert auch alles ohne Probleme, deshalb fragen wir uns, warum der Fehler bei toUpper() kommt wenn wir static dazuschreiben und warum es funktioniert wenn wir nur das static aus der main löschen.

Ich hoffe ich hab mich verständlich ausgedrückt und bedanke mich schonmal
 

Joose

Top Contributor
Aus einem statischen Kontext kann NIE auf einen nicht statischen Kontext zugegriffen werden.
Ein Interface wird immer von einem nicht statischen Kontext implementiert -> daher kannst du die Methode "toUpper" nicht statisch machen.
Wenn du wiederrum das "static" von der main Methode entfernst ist diese Methode Teil des nicht statischen Kontext und der Aufruf macht keine Probleme.
Leider muss jedes Java Programm ein statische main Methode haben um ausgeführt zu werden.

Die 1.Variante passt schon mit der Klasse "StringToolkitImpl". In der main Methode müsst ihr dann ein Objekt dieser Klasse erzeugen ;)
 

Flown

Administrator
Mitarbeiter
Eine Analogie hier:

MultiplicationUtil Interface
Java:
interface MultiplicationUtil {
  int multiply(int a, int b);
}

SimpleMultiplication
Java:
class SimpleMultiplication implements MultiplicationUtil {
  
  @Override
  public int multiply(int a, int b) {
    return a * b;
  }
}

AnotherSimpleMultiplication
Java:
class AnotherSimpleMultiplication implements MultiplicationUtil {
  
  @Override
  public int multiply(int a, int b) {
    int result = 0;
    for (int i = 0; i < b; i++) {
      result += a;
    }
    return result;
  }
}

InterfaceTest
Java:
public class InterfaceTest {
  public static void main(String... args) {
    MultiplicationUtil mult = new SimpleMultiplication();
    int a = 4;
    int b = 5;
    System.out.println(mult.multiply(a, b));
    mult = new AnotherSimpleMultiplication();
    System.out.println(mult.multiply(a, b));
  }
}
 
Zuletzt bearbeitet:

freakdran

Mitglied
Hieße das, dass es bei Flown die letzten 3 in 3 verschiedene Klassen müssen?



Ist das Thema der Vorlesung am Freitag gewesen, bzw der Anfang davon und morgen würde der Rest kommen, nur muss die Aufgabe bis Vorlesungsbeginn fertig sein.
 

Flown

Administrator
Mitarbeiter
Joose hat recht. Jede Klasse oder Interface sollte in einer eigenen Datei definiert sein!
Man könnte alle in eine Datei schreiben, aber dann müsst man die Klassen/Interfaces static deklarieren, damit man von außen auch auf sie zugreifen kann. Sonst würde man eine Instanz aus der beinhaltenden Klasse benötigen. Aber das ist äußerst selten und sollte nicht verwendet werden.
 

freakdran

Mitglied
Ok, danke, das macht das zumindest etwas verständlicher, da ich das bisher nicht wusste.
Ich habs grade mal handschriftlich als Pseudocode geschrieben und ich glaube ich habs verstanden und die Lösung (bin mir aber nicht ganz sicher ob das so funktioniert :bahnhof:

Edit: @Flown: Ja, hatten wir bisher so noch nicht besprochen deshalb war mir das unklar

Edit2: Ok hab jetzt erst mal noch getestet, ich kann auch alles in eine Datei schreiben (was mich zumindest im Moment weniger verwirren wird) und deshalb versuch ichs jetzt einfach alles erst mal in eine Datei zu packen. Wir müssen ja nur in dieser einen Datei arbeiten und nicht von außen auf etwas zugreifen.
 
Zuletzt bearbeitet:

freakdran

Mitglied
Es scheint zu funktionieren, also großes Danke an Flown und Joose.

Ich würde den Code gerne posten, ist aber meiner Meinung nach etwas lang und unübersichtlich wenn man nicht gerade weis was genau gemacht wird, selbst ich muss teilweise grade suchen. :D
 

Joose

Top Contributor
Poste ihn einfach, damit andere mit einem ähnlichen Problem eine Lösung haben :)
Ob es dann die optimalste ist oder nicht sei mal dahin gestellt. Aber wird sich sicher auch jemand finden der euch dann eine vereinfachte Version zeigt ;)
 

freakdran

Mitglied
Ich schreib mein kleineres Problem einfach noch hier dazu, dass ich nicht noch ein Thema erstellen muss, dafür erscheint mir das Problem zu banal.

Ich hab mehrere Methoden, die ein Zeichen eines Hauptstrings mit dem ersten Zeichen eines anderen (Sucher-)Strings vergleicht, falls die Zeichen gleich sind ruft sie eine weitere Methode auf, die die Zeichen des Hauptstrings von der Stelle des gefundenen Zeichens ab in einen neuen String packen mit der maximalen Länge des Sucherstrings. Dann wird der neue String zurückgegeben und mit dem Sucherstring verglichen.
Jetzt kommt das Problem:
Java:
if(pruefstring == search)
			return zaehler;
Ich hab es mit Breakpoints Zeile für Zeile durchlaufen lassen und habe gemerkt dass er zwar z.B.
Java:
if("2" == "2")
überprüft, aber dann einfach das return ignoriert und den zaehler weiterzählen lässt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
H Implementierung von Interfaces Java Basics - Anfänger-Themen 4
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
I Erste Schritte Implementierung der API Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
G Implementierung eines Kontos Java Basics - Anfänger-Themen 11
M Quicksort implementierung Java Basics - Anfänger-Themen 23
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
K Kleiner Fehler bei Methoden Implementierung Java Basics - Anfänger-Themen 6
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
S OOP Implementierung Komposition, Aggregation, Assoziation und Generalisierung Java Basics - Anfänger-Themen 2
C Klassenhirarchien zur Implementierung von Fahrzegen Java Basics - Anfänger-Themen 26
BinaryLogic Datentypen Statistik Interface - untersch. Implementierung Java Basics - Anfänger-Themen 5
E Performante Implementierung eines "Hintergrundprogramms" Java Basics - Anfänger-Themen 10
S Saubere Implementierung Java Basics - Anfänger-Themen 2
K Dijkstra implementierung 2.0 Java Basics - Anfänger-Themen 19
K dijskral implementierung Java Basics - Anfänger-Themen 14
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
B OOP Problem bei Implementierung von Interface Java Basics - Anfänger-Themen 6
J HashSet Implementierung Java Basics - Anfänger-Themen 16
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
D Datentypen Implementierung eines Binärbaumes Java Basics - Anfänger-Themen 7
B Implementierung Java Basics - Anfänger-Themen 2
N Implementierung Tic tac toc Java Basics - Anfänger-Themen 25
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
Y Implementierung einer Potenzturm Funktion Java Basics - Anfänger-Themen 4
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
U Implementierung Constructor Java Basics - Anfänger-Themen 7
T Problem mit Implementierung von einer HashMap aufgabe Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
I Zugriff auf Implementierung verhindern Java Basics - Anfänger-Themen 8
D Implementierung nach MVC Java Basics - Anfänger-Themen 6
B Theoretische Frage zum Programmbau (nun zur Implementierung) Java Basics - Anfänger-Themen 8
G Implementierung von Bäumen Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
B Wie funktioniert die implementierung von c code in Java? Java Basics - Anfänger-Themen 7
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Wozu dient Interfaces? Java Basics - Anfänger-Themen 6
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
I XML und Interfaces aus anderen Projekten Java Basics - Anfänger-Themen 3
8u3631984 Record - Interfaces Java Basics - Anfänger-Themen 4
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
H Sinn von Interfaces Java Basics - Anfänger-Themen 21
B JaxB und Interfaces? Java Basics - Anfänger-Themen 2
M Funktionale Interfaces Java Basics - Anfänger-Themen 3
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Zweck von Interfaces immer noch nicht klar Java Basics - Anfänger-Themen 3
M Klasse erbt von Interfaces Java Basics - Anfänger-Themen 6
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
H Polymorphie Interfaces und statischer Typ Java Basics - Anfänger-Themen 33

Ähnliche Java Themen

Neue Themen


Oben