Vererbung

Gerlon

Aktives Mitglied
Guten Tag,

ich habe eine Frage zur Vererbung.
Wenn ich zum Beispiel eine Klasse Rechnung habe welche eine Kundennummer und ein Kundenobjekt mit namen, vornamen usw. erwartet.
Und ich dann der Klasse Kunde noch eine Unterklasse zuordne welche zusätzliche Werte hat um zum Beispiel als Student zu gelten.
Woher weiß die Rechnungklasse das es ein Studentenobjekt ist und kein Kundenobjekt.
Funktioniert das automatisch oder wie darf ich mir sowas vorstellen, wollte das nutzen aber bisher verstehe ich das nicht so ganz.
Da das Studentenobjekt zum Beispiel noch die Uni und die MatrNr. übergeben bekommt. Aber das beim Kunden nicht vorhanden ist.
Der Konstruktor in Rechnung sieht so aus :
Java:
Rechnung(int nummer,Kunde k)


mit freundlichen Grüßen

Gerlon
 

Schandro

Top Contributor
mit
Code:
k instanceof Student
kannst du prüfen ob k vom Typ Student ist, und mit
Code:
(Student) k
kannst du k nach Student casten, um auf die Student-spezifischen Methoden/Attribute zuzugreifen.
 

Timothy Truckle

Top Contributor
Woher weiß die Rechnungklasse das es ein Studentenobjekt ist und kein Kundenobjekt
Der Trick ist, dass die Rechnungsklasse das gar nicht wissen muss.
Die Klasse
Code:
Kunde
stellt eine oder mehrere Methoden zur Verfügung, mit der die Rechnungsklasse die Daten anfordert, die in der Rechnung erscheinen sollen. Wie diese Daten zustande kommen ist Sache der jeweiligen Spezialisierung von
Code:
Kunde
:
Java:
inteface Kunde { // definiert Methoden, die Rechnung benötigt
  String getAnschrift();
  String getBetragMitWaehrungszeichen();
}
class StandardKunde implements Kunde{
 @Override public String getAnschrift(){ return "Rechnungsanschrift normaler Kunde";}
 @Override public String getBetragMitWaehrungszeichen(){ "normal berechneter Betrag"; }
}
class Student extends StandardKunde{
    // getAnschrift() wird geerbt.
    @Override String getBetragMitWaehrungszeichen(){ "Studenten Betrag"; }
}

class Rechnung{
 public void druckeRechnung(List<Kunde> kundenListe){
   for(Kunde kunde :kundenListe){
     System.out.println("Kunde:");
     System.out.println(kunde.getAnschrift());
     System.out.println("Betrag:");
     System.out.println(kunde.getBetragMitWaehrungszeichen());
   }
 }
}
Die Schwierigkeit besteht idR. darin, die Daten, die man speichert nicht zu sehr auf die Ausgabe zuzuschneiden.

Und noch ein Tipp: Gleitkommazahlen (
Code:
fload
/
Code:
double
) sind für Rechnungen mit Geld absolut ungeeignet.
Code:
BigDecimal
ist genau dafür da, aber damit muss "objektorientiert" gerechnet werden. Also nicht
Java:
brutto = netto * mehrwertSteuer
sondern
Java:
brutto = netto.multiply(mehrwertSteuer)
bye
TT
 

Gerlon

Aktives Mitglied
Danke erstmal.

Aber geht es nicht auch ohne Interface ?
Das ich irgendwie auf den Konstruktor trotzdem zugreifen kann oder ist das nur dadurch machbar ?
Werde das mit den Cast denke mal erstmal probieren. Sollte glaube nämlich hierfür noch kein Interface benutzen.
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Es geht auch ohne interface, ist zwar in vielen Fällen schöner und dynamischer erst nur ein interface zu deklarieren, aber bei kleinen Sachen ist es meist overkill.

Das ich irgendwie auf den Konstruktor trotzdem zugreifen kann
Was meinst du damit?
 

Gerlon

Aktives Mitglied
Naja ich brauche ja nur die eine Unterklasse mehr soll das erstmal nicht können außer normal Kunde und Student für den Rabatt.

Java:
public Kunde (int kundenNr, String name, String vorname, String addresse, Datum d)

Java:
public Student(int kundenNr, String name, String vorname, String addresse, Datum d,int  MatrNr, String Uni) {
		super(kundenNr, name, vorname, addresse, d);

so sehen die Konstruktoren bisher aus, und da wollte ich wissen ob der die 2 letzten Werte welche nicht von Kunde geerbt werden trotzdem irgendwie feststellen kann
 
Zuletzt bearbeitet:

Schandro

Top Contributor
nein,
Code:
Kunde
hat keine Ahnung von
Code:
MatrNr
und
Code:
Uni
.

Du musst entweder Methoden überschreiben (siehe Beitrag von Timothy Truckle) oder casten (siehe meinen 1. Beitrag).
 

Gerlon

Aktives Mitglied
Ich versuche mich jetzt an dem Interface Comparable. Aber so recht verstehe ich das nicht.

Ich möchte damit Produktnummern vergleichen..
Ich habe zum Beispiel mehrere Klassen die das verwenden, nehmen wir mal an Getränke und Nahrungsmittel.
Was muss ich da dann vergleichen ich habe ja in dem Moment nur einen Wert. Dh. muss ich die anderen Speichern oder wie funktioniert das?

Habe mir ebend einige Beispiele angeschaut die in etwa so aussehen nur dass das 2. Mal nummer halt irgendwas anderes sein muss.

Java:
if (nummer==nummer)return 0;
		if (nummer>nummer)return 1;
		if (nummer<nummer)return -1;
 

Timothy Truckle

Top Contributor
Da dies eine neue Frage ist solltest Du die sen Thread schließen und einen neuen anfangen...

---------------------------------------

Das Interface
Code:
Comparable
dient ausschließlich zum Sortieren von Objekten der selben Klasse nach einer "natürlichen" Reihenfolge (oder deren Spezialisierungen, solange sie die selbe natürliche Reihenfolge haben). Produktnummern scheinen für mich kein geeignetes Sortierktiterium zu sein, da diese idR. eine innere Logik haben und nicht als simple fortlaufende Nummern bereitgestellt werden.

Aber sei's drum....

Das interface
Code:
Comparable
definiert eine Methode:
Java:
public int compareTo(T o)
in dieser Methode Vergleichst Du MemberVariablen des Objektes, in dem die Methode gerade ausgeführt wird (also auf die Du mit
Code:
this.variable
zugreifst) mit MemberVariablen des als Parameter übergebenen Objektes der selben Klasse (die Du über
Code:
o.variable
erreichts). Das dürfen auch mehrere Variablen sein. Hier mal ein Beispiel für Spielkarten:
Java:
class SpielKarte implements Comparable<SpielKarte>{
  static enum KartenFarbe { KARO, HERZ, PIK, KREUZ }
  static enum KartenWert { SIEBEN,ACHT,NEUN,ZEHN,BUBE,DAME,KOENIG,AS }
  private final KartenFarbe kartenFarbe;
  private final KartenWert kartenWert;
  public SpielKarte(KartenFarbe kartenFarbe,KartenWert kartenWert){
    this.kartenFarbe = kartenFarbe;
    this.kartenWert = kartenWert;
  }
  @Override
  public int compareTo(SpielKarte o){
    if (this.kartenFarbe!=o.kartenFarbe){ // Farbe hat höhere Priorität
       return this.kartenFarbe.ordinal() - o.kartenFarbe.ordinal();
        // wichtig ist, dass ein int zurückgegeben wird, und in unserem Fall ist kein "buffer overflow" zu befürchten,
      // d.h., die Differenz wird nie kleiner als der kleinst mögliche Wert, den man in einem int speichern kann.
    } else {
       return this.kartenWert.ordinal() - o.kartenWert.ordinal(); 
       // auch hier reicht es die Differenz zu bilden:
       // ist das Ergenbnis 0 sind sind beide Objekte gleich.
       // ist das Ergebnis negativ ist o weiter rechts/hinten als this einzuordnen
       // ist das Ergebnis positiv ist o weiter links/vorn als this einzuordnen.
    }
  } 
}
Wie man sieht muss nichts "gemerkt" werden. Interessant ist auch, dass wir auf private Variablen von
Code:
o
zugreifen können, weil wir ja in der selben Klasse sind.
BTW: weil
Code:
enum
selbst
Code:
Comparable
implementieren könnten Zeilen 12 bis 18 auch so aussehen:
Java:
if (this.kartenFarbe!=o.kartenFarbe){
  return this.kartenFarbe.compareTo(o.kartenFarbe);
} else {
   return this.kartenWert.compareTo(o.kartenWert);
}
Das wäre sogar zu bevorzugen. Nur bei primitiven Zahlentypen (die klein geschriebenen) sollte man selbst vergleichen.

Diese
Code:
SpielKarten
-Objekte kannst Du jetzt ohne weiteres in beliebiger Reihenfolge in einem
Code:
TreeSet
ablegen und der Iterator des
Code:
TreeSet
wir Dir die Karten bei Karo 7 beginnend in der richtigen Reihenfolge ausgeben.

Während eines Kartenspiels gibt's dann noch Sonderregeln für Vergleiche wie Trumf oder Ähnliches, aber dass ist mit
Code:
Comparable
nur über unschöne Tricksereien abbildbar. Dass aber nur nebenbei...

bye
TT
 
Zuletzt bearbeitet:

Gerlon

Aktives Mitglied
Hm, habe es jetzt mit 2 Schemata probiert immer ein Fehler beim Sortieren

Java:
Lampe[] array = new Lampe[]{
    new Lampe( "Halogenmetalldampflampe", 6600 ),
    new Lampe( "Gewöhnlich 60W", 730 ),
    new Lampe( "Leuchtstoffröhre", 3250 ),
    new Lampe( "Natriumdampflampe", 8000 ),
    new Lampe( "Halogenlampe 12V/50W", 1050 ),
    new Lampe( "Kompaktleuchtstoffröhre", 2900 ),
    new Lampe( "Gewöhnlich 100W", 1350 ),
    new Lampe( "HQL 125W", 5000 )
};
 
System.out.println( java.util.Arrays.toString( array ));
        
// hier wird sortiert
java.util.Arrays.sort( array ); //<-- Fehler
        
System.out.println( java.util.Arrays.toString( array ));

das 2. hier wäre wahrscheinlich so etwas in der Art wie du meintest hatte das erste nur probiert als das hier nicht funktionierte..
Java:
        List ts1 = new ArrayList();
        ts1.add(new Nahrungsmittel (004,"Fisch",2.40));
        ts1.add(new Nahrungsmittel (003,"Brot",0.82));
        ts1.add(new Nahrungsmittel (005,"Pizza",7.00));
        Collections.sort(ts1);  //<-- Fehler
        Iterator itr = ts1.iterator();

        while(itr.hasNext()){
            Object element = itr.next();
            System.out.println(element + "\n");
            
        }

die compareto sieht nun so aus:

Java:
	public int compareTo(Nahrungsmittel o) {
		
		if (this.nummer==o.nummer)return 0;
		if (this.nummer>o.nummer)return 1;
		
		return -1;
		
	}
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Bitte schreibe auf keien Fall, welcher Fehler kommt. Damit nimmst du uns den Spaß ein kskb zu schreiben und zu erraten, was da noch so alles steht bei dir.
 
G

gst

Gast
Was du auch auf gar keinen Fall benutzen solltest:
  • Generics - könnten deinen Code und solche Aufrufe wie Collections.sort nur unnötig typsicher machen
  • Tutorials/Literatur welche jünger als 7 Jahre sind - damit du allgemein vor verbesserten Konzepten verschont bleibst
 

Gerlon

Aktives Mitglied
Tut mir ja leid aber das war halt nun mal mein Problem, und im Code wird so ja kein Fehler angezeigt. Erst beim compilen.
und ich weiß nunmal nicht warum diese Fehlermeldung kommt..

Und hätte ich wieder nur den Code gepostet hätte jemand anderes gefragt was nun mein Problem ist.. deswegen wollte ich es nunmal diesmal klar machen.

Und wenn ich sowas nicht benutzen soll was denn sonst, bisher keine anderen Beispiele gefunden. Und da Collection nicht funktionierte hatte ich es halt mit einem Array versucht.
 
G

gst

Gast
Viel Gelaber, null Inhalt. Von einer Fehlermeldung ganz zu schweigen. Wie Marcinek schon schrieb, so wird das nix wenn du Hilfe willst.
 

Gerlon

Aktives Mitglied
Bei mir ist da aber eine.. und ich dachte ihr wolltet raten was sein könnte.. verstehe euch nicht warum ihr so schlecht gelaunt seid.
Wollte niemandem etwas böses..
Wenn du keine Lust hast "Gast" warum postest dann überhaupt etwas..

Viel Gelaber, null Inhalt.

Etwas unnötig oder?
Ich gehe dann auf euch ein warum ich das gemacht habe und werde noch beleidigt ?


Exception in thread "main" java.lang.ClassCastException: blatt05.Nahrungsmittel cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at blatt05.Tester.main(Tester.java:95)

Falls eventuell doch noch jemand weiß was das zu bedeuten hat, und Lust hat mir das zu erklären. Ist immer beim Sortieren.
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Wie sieht die Klassendefinition der Klasse "Nachrungsmittel" aus?

Diese scheint Comparable nicht zu implementieren.

Es ist durchaus Mühsam alle Informationen nach einander zu erfragen ;D - Und das führt wieder zu den nächsten 3 Postings, die das kommentieren ^^
 
Zuletzt bearbeitet von einem Moderator:

Gerlon

Aktives Mitglied
Diese sieht bisher so aus:

Java:
public class Nahrungsmittel extends Produkt implements Comparable{
	private int nummer;
	private String name;
	private double preis;
	
	public Nahrungsmittel(int nummer, String name, double preis) {
		super(nummer, name, preis);
		this.nummer=nummer;
		this.name = name;
		this.preis=preis;
	}

Dazu ist die compareTo natürlich enthalten, wie auch immer die nun richtig ist. Bei der auch mehrere Arten probiert mit Exception usw.
 
B

Beni

Gast
Vermutlich wäre es effizienter, wenn du jeweils die gesammte Klasse und alle Fehlermeldungen postest. Mit mehr Informationen lassen sich nämlich Fragen schneller beantworten... schreib doch ein kleines Programm das in eine einzelne Datei passt, und poste es hier. Dann kann man das Programm kopieren und ausführen - und so den Fehler nachvollziehen.

In diesem Zusammenhang: Wie man Fragen richtig stellt.
 
Zuletzt bearbeitet von einem Moderator:

Gerlon

Aktives Mitglied
Nahrungsmittel Klasse
Java:
package blatt05;

public class Nahrungsmittel extends Produkt implements Comparable{
	private int nummer;
	private String name;
	private double preis;
	
	public Nahrungsmittel(int nummer, String name, double preis) {
		super(nummer, name, preis);
		this.nummer=nummer;
		this.name = name;
		this.preis=preis;
	}

	public int getNummer() {
		return nummer;
	}

	public void setNummer(int nummer) {
		this.nummer = nummer;
	}

	@Override
	public double berechneSteuer() {
		double nahrung = 1.07;
		return nahrung;
	}

	@Override
	/*public int compareTo(Object o) throws ClassCastException {
		if (!(o instanceof Nahrungsmittel))
			throw new ClassCastException ("Ein Nahrungsmittel objekt erwartet");
		int nummer2 = ((Nahrungsmittel) o).getNummer();
		//if (this.nummer==o)return 0;
		//if (this.nummer>o)return 1;
		
		//return this.nummer-nummer2;
		
	}*/
	public int compareTo(Object o) {
		if (nummer < ((Getraenk) o).getNummer()) { return -1; }
			else if (nummer == ((Getraenk) o).getNummer()) { return 0; }
			else { return 1; }
			}
	


}

main
Java:
package blatt05;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;



public class Tester {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		// new Kunde(kundenNr,name,vorname,adresse,datum)
		Kunde k1 		= new Kunde(001,"Rauschenfurt","Thomas","Irgendwostra�e 12",new Datum(12, 12, 1985));
		Kunde k2 		= new Kunde(002,"Faustfeld","Max ","Nirgendwoplatz 10",new Datum(1, 8, 1995));
		// new Student(kundenNr,name,vorname,adresse,datum,matNr,Uni)
		Student s1 	= new Student(003,"Schuster","Nina  ","Unbekannter Weg 11",new Datum(8, 7, 1982), 23425, "TU-Berlin");
		
		//new Getraenk(produktNr,name,preis,alkoholGehalt)
		Getraenk wasser = new Getraenk(001,"Wasser",1.85,0); 
		Getraenk mate = new Getraenk(002,"Mate",1.30,0); 
		Getraenk bier = new Getraenk(42,"Bier",1.19,4.5);
		
		//new Nahrungsmittel(produktNr,name,preis)
		Nahrungsmittel brot = new Nahrungsmittel(003,"Brot",0.82);
		Nahrungsmittel fisch = new Nahrungsmittel(004,"Fisch",2.40);
		Nahrungsmittel pizza = new Nahrungsmittel(005,"Pizza",7.00);
		
		//Tabak
		Tabak pueblo = new Tabak(006,"Pueblo",3.75);
		
		//Rechnungen...
		//new Rechnungsposten(anzahl,produkt)
		Rechnung r1 = new Rechnung(1, k1);
		r1.postenHinzufuegen(new Rechnungsposten(10,bier));
		r1.postenHinzufuegen(new Rechnungsposten(3,pizza));
		r1.postenHinzufuegen(new Rechnungsposten(1,pueblo));
		
		System.out.println(r1.druckeRechnung()); 
//		
	Rechnung r2 = new Rechnung(1, k2);
		r2.postenHinzufuegen(new Rechnungsposten(6,wasser));
		r2.postenHinzufuegen(new Rechnungsposten(3,bier));
		r2.postenHinzufuegen(new Rechnungsposten(12,mate));
		r2.postenHinzufuegen(new Rechnungsposten(5,brot));
		r2.postenHinzufuegen(new Rechnungsposten(2,pizza));
		r2.postenHinzufuegen(new Rechnungsposten(1,fisch));
//		
		System.out.println(r2.druckeRechnung());
//		
		Rechnung r3 = new Rechnung(1, s1);
		r3.postenHinzufuegen(new Rechnungsposten(30,mate));
		r3.postenHinzufuegen(new Rechnungsposten(10,pizza));
		r3.postenHinzufuegen(new Rechnungsposten(1,pueblo));
//		
		System.out.println(r3.druckeRechnung());
		
	/*     List ts1 = new ArrayList();
        ts1.add(new Nahrungsmittel (004,"Fisch",2.40));
        ts1.add(new Nahrungsmittel (003,"Brot",0.82));
        ts1.add(new Nahrungsmittel (005,"Pizza",7.00));
        
        Collections.sort(ts1);
        Iterator<Nahrungsmittel> itr = ts1.iterator();
        
        while(itr.hasNext()){
            Object element = itr.next();
            System.out.println(element + "\n");
            
        }*/
        
	      Nahrungsmittel[] nahrung = new Nahrungsmittel[3];
	      nahrung[0] = new Nahrungsmittel(004,"Fisch",2.40);
	      nahrung[1] = new Nahrungsmittel(003,"Brot",0.82);
	      nahrung[2] = new Nahrungsmittel(005,"Pizza",7.00);
	      for ( int i = 0; i<3; i++){
	    	  Nahrungsmittel nahrungAus = nahrung[i];
	    	  int nummer  = nahrungAus.getNummer();
	    	  System.out.println(nummer);
	      }
	      Arrays.sort(nahrung);
	      
	      for ( int i = 0; i<3; i++){
	    	  Nahrungsmittel nahrungAus = nahrung[i];
	    	  int nummer  = nahrungAus.getNummer();
	    	  System.out.println(nummer);
	      }
	     
	      
		
	        }
	}

Fehlermeldung hatte ich nun ja schon mal gepostet.. die kommt immer wenn ich versuche die dann zu sortieren!
 
Zuletzt bearbeitet:

Timothy Truckle

Top Contributor
die compareto sieht nun so aus:
Java:
	public int compareTo(Nahrungsmittel o) {
		
		if (this.nummer==o.nummer)return 0;
		if (this.nummer>o.nummer)return 1;
		
		return -1;
		
	}
Diese sieht bisher so aus:
Java:
public class Nahrungsmittel extends Produkt implements Comparable{
	private int nummer;
	private String name;
	private double preis;
	
	public Nahrungsmittel(int nummer, String name, double preis) {
		super(nummer, name, preis);
		this.nummer=nummer;
		this.name = name;
		this.preis=preis;
	}
Du solltest eigentlich schon eine Fehler beim Compilieren bekommen, weil Deine Klasse zwar eine
Code:
compareTo()
Methode hat, diese aber nicht die
Code:
compareTo()
aus
Code:
Comparable
(ohne Generics) implementiert.

Du musst entweder den Parameter Deiner
Code:
compareTo()
zu
Code:
Object
ändern (und dann selbst nach
Code:
Nahrungsmittel
casten oder (besser) bei der Definition von
Code:
Nahrungsmittel
Generics nutzen:
Java:
public class Nahrungsmittel extends Produkt implements Comparable<Nahrungsmittel>{

bye
TT
 
B

Beni

Gast
Ich habe alles in eine Datei geworfen und alles gelöscht, das ich nicht kannte (in deinem Projekt solltest du das natürlich nicht tun). Der Code der noch übrig blieb war nicht ganz korrekt, deine compareTo-Methode passte überhaupt nicht zu Nahrungsmittel. Wenn man aber statt "Getränk" "Nahrungsmittel" einsetzt kommt was funktionierendes raus. Das sieht dann etwa so aus:

Java:
package test;

import java.util.Arrays;

public class Tester {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		// new Nahrungsmittel(produktNr,name,preis)
		Nahrungsmittel brot = new Nahrungsmittel(003, "Brot", 0.82);
		Nahrungsmittel fisch = new Nahrungsmittel(004, "Fisch", 2.40);
		Nahrungsmittel pizza = new Nahrungsmittel(005, "Pizza", 7.00);

		Nahrungsmittel[] nahrung = new Nahrungsmittel[3];
		nahrung[0] = new Nahrungsmittel(004, "Fisch", 2.40);
		nahrung[1] = new Nahrungsmittel(003, "Brot", 0.82);
		nahrung[2] = new Nahrungsmittel(005, "Pizza", 7.00);
		for (int i = 0; i < 3; i++) {
			Nahrungsmittel nahrungAus = nahrung[i];
			int nummer = nahrungAus.getNummer();
			System.out.println(nummer);
		}
		Arrays.sort(nahrung);

		for (int i = 0; i < 3; i++) {
			Nahrungsmittel nahrungAus = nahrung[i];
			int nummer = nahrungAus.getNummer();
			System.out.println(nummer);
		}

	}

	public static class Nahrungsmittel implements Comparable<Nahrungsmittel> {
		private int nummer;
		private String name;
		private double preis;

		public Nahrungsmittel(int nummer, String name, double preis) {
			this.nummer = nummer;
			this.name = name;
			this.preis = preis;
		}

		public int getNummer() {
			return nummer;
		}

		public void setNummer(int nummer) {
			this.nummer = nummer;
		}

		@Override
		public int compareTo(Nahrungsmittel o) {
			if (nummer < o.getNummer()) {
				return -1;
			} else if (nummer == o.getNummer()) {
				return 0;
			} else {
				return 1;
			}
		}
	}
}
 

Gerlon

Aktives Mitglied
@Timothy Truckle Habe es einmal mit einem Object und einmal mit Generics versucht. War dann auch jeweils angepasst, sodass keine Fehler kamen. Erst wie gesagt beim ausführen. Und da immer derselbe!


Habe nachwievor dasselbe, langsam keine Hoffnung mehr ^^
Java:
public interface Comparable <T>{
	
	public int compareTo(T o);
}
Hatte die jetzt so angepasst.
Wie sieht deine Comparable aus, vielleicht ist da ja doch ein Fehler ?!

Java:
        @Override
        public int compareTo(Nahrungsmittel o) {
            if (nummer < o.getNummer()) {
                return -1;
            } else if (nummer == o.getNummer()) {
                return 0;
            } else {
                return 1;
            }
        }

In der Art hatte ich das auch schon einmal.
Aber was meintest du mit Getränk, das hatte ich doch dafür bisher noch garnicht benutzt ?!
Achso tut mir Leid aus der falschen Klasse die compareTo genommen war aber für jede angepasst!
ALso in Nahrungsmittel war das auch richtig für Nahrungsmittel^^
Ich habe mehrere Produktunterklassen, Nahrungsmittel ist eine davon. Wollte das eigentlich für alle diese implementieren. Aber bisher bekomme ich es ja nicht mal für eine richtig hin ^^
 
Zuletzt bearbeitet:
B

Beni

Gast
Ich habe ein Verdacht, er ist so schrecklich, dass ich ihn kaum auszusprechen vermag.

Du hast selbst ein Interface "Comparable" geschrieben?

Dieses Interface hat vielleicht denselben Namen und dieselben Methoden wie das echte Comparable - aber es ist trotzdem ein anderes Interface. Lösche die Datei "Comparable.java" aus deinem Projekt, und benutze stattdessen das Comparable das im JDK definiert ist.
 

Gerlon

Aktives Mitglied
Boah ich bin so doof xD garnicht registriert das es ein internes interface ist.. bisher immer eigene genommen zum zeichnen usw..

Danke hat das suchen endlich ein Ende -.-

Danke Allen die mir versucht haben das Interface Problem näher zu bringen, damit bisher leider noch keine sonderliche Erfahrung bin noch viel am probieren!

Eine Frage hätte ich dennoch ist es möglich wenn die Unterklassen angepasste Produktnummern haben,also alle Nummern unterscheiden sich, diese mit dem Verfahren zu ordnen ?
Glaube aber es meinte jemand mal das es nur in ein und derselben Klasse geht richtig ?

Ich müsste das wahrscheinlich für alle einzeln machen und die zusammen in einer Liste speichern und dann nochmal ordnen oder gehts einfacher ?
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Eine Frage hätte ich dennoch ist es möglich wenn die Unterklassen angepasste Produktnummern haben(also alle unterscheiden sich) aus allen das irgendwie zu ordnen ?
Glaube aber es meinte jemand mal das es nur in ein und derselben Klasse geht richtig ?
Ok, habs glaube ich verstanden. Ja die kannst du Ordnen. Eben über Comparable.

Z.B. in einer TreeMap.
 
Zuletzt bearbeitet:
B

Beni

Gast
Weil du nie sicher sein kannst, von welchem Objekt die compareTo Methode ausgeführt wird, ist es keine gute Idee Objekte mit verschiedenen compareTo Methoden zu mischeln. Wenn deine Unterklassen keine eigene compareTo Methode haben, wird alles funktionieren. Wenn du in den Unterklassen compareTo überschreibst wirst du Probleme bekommen.

In solchen Fällen implementiert man besser das Interface "Comparator". Ein Comparator erhält zwei Objekte und kann entscheiden, welches grösser ist. Der Comparator ist aber unabhängig von den Unterklassen, und hat deshalb weniger Probleme.
 

Gerlon

Aktives Mitglied
Bisher nutzen alle(3) Unterklassen dasselbe Verfahren.

Wie oben ja zusehen war habe ich Nahrungsmittel, Getränke und Tabak.

Naja werde mal schaun was mir dazu einfällt.
 

Gerlon

Aktives Mitglied
Habe jetzt alle 3 Klassen ihre Nummern ordnen lassen. Das ist die bisherige Ausgabe Problem sollte ersichtbar sein das ich die 42 ans Ende haben möchte.
Java:
1 Wasser
2 Mate
42 Bier
3 Brot
4 Fisch
5 Pizza
6 Pueblo

Comparator etc. wollte ich jetzt nicht noch extra einfügen!
Kann man die jetzt nocheinmal zu einer Liste adden die 3 Arrays und ordnen ?
Wahrscheinlich total umständlich wie ich das jetzt mache^^
Mein Problem lag jetzt darin wie ich das machen soll da ich ja Objekte bereitstelle und nicht einfach nur Zahlen.
Hatte so angefangen.
Java:
ArrayList al = new ArrayList();
	      al.add(nahrung);
	      al.add(getraenk);
	      al.add(tabak);

Hatte vorher wie du gesagt hattest den Fehler wenn ich einfach

Java:
       List ts1 = new ArrayList();
	        ts1.add(new Nahrungsmittel(004,"Fisch",2.40));
	        ts1.add(new Nahrungsmittel(003,"Brot",0.82));
	        ts1.add(new Nahrungsmittel(005,"Pizza",7.00));
	       // ts1.add(new Getraenk(002,"Mate",1.30,0));
	        Collections.sort(ts1);
	        Iterator itr = ts1.iterator();

	        while(itr.hasNext()){
	            Object element = itr.next();
	            System.out.println(element + "\n");
	            
	        }

das in diesem Schema machen möchte es nicht geht.

Wenn es jetzt nicht so einfach geht wie ich mir das vorstelle dann lass ich das erstmal so :eek:
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
ich hab mir jetzt nicht alles durchgelesen... aber was hast du vor sowas?

Java:
public class Product implements Comparable<Product> {

	private int number;

	public Product(int number) {
		super();
		this.number = number;
	}

	public int getNumber() {
		return number;
	}

	@Override
	public int compareTo(Product o) {
		return number - o.number;
	}

}
Java:
public class Drink extends Product {

	private String name;

	public Drink(int nummer, String name) {
		super(nummer);
		this.name = name;
	}
	
	public String toString(){
		return "Getränk: "+name+" "+getNumber();
	}

}
Java:
public class Food extends Product {

	private String name;

	public Food(int nummer, String name) {
		super(nummer);
		this.name = name;
	}
	
	public String toString(){
		return "Essen "+name+" "+getNumber();
	}

}
Java:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {

	public static void main(String[] args) {
		List<Product> produkte = new ArrayList<Product>();
		produkte.add(new Drink(1, "Bier"));
		produkte.add(new Drink(3, "Wein"));
		produkte.add(new Food(2, "Brot"));
		
		Collections.sort(produkte);
		
		for(Product product : produkte){
			System.out.println(product);
		}
	}
}
 

Gerlon

Aktives Mitglied
Ok, habe es gerade ausprobiert sieht gut aus.
Jetzige Ausgabe.
Java:
Getränk: Wasser 1
Getränk: Mate 2
Nahrungsmittel: Brot 3
Nahrungsmittel: Fisch 4
Nahrungsmittel: Pizza 5
Tabak: Pueblo 6
Getränk: Bier 42

Danke dir ARadauer für den Hinweis !

Allen anderen Danke ich auch, für die einzelnen Methoden das zu sortieren werde ich bestimmt auch noch brauchen! ;)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben