Interface Abstrakte Interface Methode kann nicht benutzt werden

ArdianH101

Mitglied
Hallo,
ich bin gerade dabei mir ein wenig Java Basics an zu eignen und hänge an einem Problem.
Kurz zum Kontext der Aufgabe:
Ich hab Drei Klassen [Apfel, Birne, Auto], dazu ein interface vergleichbarInKilos, welche in der main Methode aufgerufen wird, damit Instanzen der drei Klassen miteinander verglichen werden können.
In der Main Methode wird mir aber nun gesagt, ich könne die abstrakte Methode nicht aufrufen.
Als return Type habe ich Object benutzt, weil ich nicht wusste wie ich das Problem sonst lösen soll, wenn ich auf der einen Seite ints und auf der anderen Seite doubles zurück geben muss.
Codes und Fehler im Anhang.

Ich bedanke mich schonmal für jeden Tipp! 🙂
 

Anhänge

  • apfel.JPG
    apfel.JPG
    48,6 KB · Aufrufe: 57
  • auto.JPG
    auto.JPG
    47,9 KB · Aufrufe: 46
  • birne.JPG
    birne.JPG
    48,2 KB · Aufrufe: 54
  • fehler.JPG
    fehler.JPG
    108,9 KB · Aufrufe: 48
  • interface.JPG
    interface.JPG
    26,3 KB · Aufrufe: 54
  • main.JPG
    main.JPG
    62,9 KB · Aufrufe: 46
Bitte poste deinen Code im Forum und nicht mit Hilfe von Bildern, danke 🙂
[Code=Java].... dein Code ....[/Code]

Dein Problem: Die Methode pruefeGewicht erwartet als Parameter nur 2 Objekte (sprich du kannst beliebige Objekte an diese Methode übergeben). Die Klasse Object besitzt aber nicht die von dir gewünschte Methode. Statt "Object" als Parametertyp zu verwenden solltest du das Interface verwenden 😉
 
Bitte poste deinen Code im Forum und nicht mit Hilfe von Bildern, danke 🙂
[Code=Java].... dein Code ....[/Code]

Dein Problem: Die Methode pruefeGewicht erwartet als Parameter nur 2 Objekte (sprich du kannst beliebige Objekte an diese Methode übergeben). Die Klasse Object besitzt aber nicht die von dir gewünschte Methode. Statt "Object" als Parametertyp zu verwenden solltest du das Interface verwenden 😉
Sorry, merk ich mir für das nächste mal 🙂
Danke erstmal.
Aber wie schreibe ich denn das Interface als Parametertyp?
Java:
public abstract VergleichbarInKilos getGewichtInKilos();
das wäre meine Idee, aber dann hab ich aber kompilierfehler bei zum Beispiel Apfel, weil der return type ja ein int ist und kein VergleichbarInKilo Typ.
 
Nein so änderst du den Rückgabewert der Methode "getGewichtInKilos" das ist ja nicht dein Ziel.

Du musst einfach statt dem Type "Object" deinen Interface Type verwenden 😉
pruefeGewicht(VergleichbarInKilos ....) {
 
Java:
private static void pruefeGewicht(VergleichbarInKilos ob1, VergleichbarInKilos ob2){                             
            if(ob1.getGewichtInKilos() > ob2.getGewichtInKilos()){
                System.out.println(ob1+" ist schwerer als "+ob2);
            }
            else{
                System.out.println(ob2+" ist schwerer als "+ob1);
            }
        }

Das solltest du doch gemeint haben oder? 😀 aber da haut er immernoch n fehler raus.

Java:
bad operand types for binary operator '>'
  first type:  java.lang.Object
  second type: java.lang.Object

ich versteh zwar dass man zwei objects nicht miteinander vergleichen kann, aber wie kann ich denn auf den "Zahlenbereich" den ich mit der VergleichbarInKilos Methode berechne, über das Object zugreifen?
.equals
vergleicht ja nur und ob man da mit größer kleiner arbeiten kann bezweifle ich.
 
Zuletzt bearbeitet:
Soll getGewichtInKilos() den überhaut ein Objekt zurückliefern? Da macht doch eher ein double Sinn. Da ist es egal ob du dann auch mal ein int zurückgibst.
 
Du kannst dafür double als Rückgabetyp benutzen. Deine zwei Probleme sollten dann gelöst sein. Falls nicht, suchen wir weiter nach Ursachen.
Vielen Dank, ich wusste nicht, dass das dann auch mit double möglich ist 😀
Kompiliert alles, jedoch ist die Ausgabe nicht korrekt:
Java:
Wer ist schwerer?!
Apfel: Sorte: Boskoop Gewicht in g: 250 und Apfel: Sorte: Golden Delicious Gewicht in g: 178 sind gleichschwer
Birne: Sorte: Williams Gewicht in kg: 0.178 ist schwerer als Apfel: Sorte: Golden Delicious Gewicht in g: 178
Apfel: Sorte: Boskoop Gewicht in g: 250 ist leichter als Auto: Marke: Trabant Gewicht in Tonnen: 0.66

Habe mal ausgetestet, warum zum Beipsiel bei der zweiten Aussage rauskommt, dass die Birne mit 178 gramm schwerer ist als der Apfel mit 178 gramm und bin drauf gekommen, dass bei der Methode getGewichtInKilos in der Apfel Klasse, also:
Code:
public class Apfel implements VergleichbarInKilos{
    private final String sorte;
    private final int gewichtInGramm;
   
    public Apfel(String sorte, int gewichtInGramm) {
        this.sorte = sorte;
        this.gewichtInGramm = gewichtInGramm;
    }

      
    public String toString() {
        return "Apfel: Sorte: "+sorte+" Gewicht in g: "+gewichtInGramm;
    }
       
        //DIE HIER IST GEMEINT
        public double getGewichtInKilos(){
            return this.gewichtInGramm/1000;
        }
}

am Ende einfach ne 0 returned wird. Die Methode teilt also das Gewicht in gramm, welches int ist durch 1000 (um auf Kilo zu kommen) und wirft dann 0 raus.
Meiner Meinung nach, wirft die Methode also immernoch n int raus, weil 178 durch tausend nunmal ne Komma Zahl wäre..

irgend welche tipps ? 🙂
 

Zurück
Oben