Abstracte Klassen

HermeZ

Mitglied
hallo,
ich habe folgendes problem mit einer Abstrakten Klasse:

Die Abstrakte Klasse Wurst hat Unterklassen wie Salami, Bluwurst, etc...
in den Unterklassen gibt es Atribute wie Gewicht, Haltbarkeitsdatum etc...
Wenn ich jetzt Beispielsweise das Gewicht ändern möchte und und mit
Salami.setGewicht(8.05) eine der Methoden Aufrufe, die in der Klasse Wurst als abstract definiert sind, sagt mir eclipse, dass setGewicht nicht Statisch ist!

Wenn ich aber setGewicht als Statisch deklariere, bekomme ich die Fehlermeldung, dass setGewicht aus der abstracten Klasse Wurst nicht implementiert wird.

kann mir wer helfen?

ach ja, ich habe keine Wahl setGewicht anders aufzurufen, es gibt eine Vorgabe es so zu tun
 
hmm, vielleicht postest du mal die klasse salami und/oder wurst

aber das sollte denke ich so aussehn

Code:
public class Salami extends Wurst {
	   private int gewicht;
	   public void setGewicht(int i){
			  gewicht = i; }
........

und dann in der main sollte folgendes folgen :

Code:
 public static void main(....){
				 Salami salami = new Salami();
				 salami.setGewicht(5);   }

und so sollte es gehn
 
Hi,
wenn du eine Funktion als abstrakt deklarierst, muss sie bei der erbenden Klasse auch implementiert werden.
Anders wenn du die ganze Klasse als abstrakt deklarierst, dann kann nur keine Instanz dieser Klasse erzeugt werden.

Gruß Patrick
 
So allgemeine Methoden wie setGewicht gehören schon in der abstrakten Klasse implementiert. Die von dir genannten Attribute ebenfalls. In die Subklassen kommen dann die für diese Wurstsorte (witziges Beispiel btw :) ) spezifischen Eigenschaften.
 
Hi,
danke erstmal für die zahlreiche Hilfe...
Ich muss dann doch wohl noch weiter ausholen...
Es geht bei dem Programm wie nicht anders zu erwarten um einen Lagerbestand von Metzgereien. Dabei soll das Programm beliebig viele Metzgereien verwalten können.
Jede Wurstware hat ein StandardGewicht welches zusammen mit der Wurstart in einer Liste gespeichert wird.
Jetzt soll aber das Gewicht im Nachhinein noch änderbar sein (logisch)...

den ganzen code zu posten währe wohl zu umfangreich... aber ich poste mal Ausschnitte
Code:
public abstract class Wurst {
	
	double gewicht;
	String name;
	String hDatum;

	public Wurst(String name,double gewicht){
		this.name = name;
		this.gewicht = gewicht;
	}
	public abstract String getName();
	
	public abstract double getGewicht();
	
	
	public abstract boolean setGewicht();
...

Code:
public class Salami extends Wurst {   //will immernoch setGewicht

	
	
	private double gewicht =8.00;
.
.
.
	public static boolean setGewicht(double gewicht){

		Metzgerei.changeGewicht(gewicht); // die Liste ist in der Klasse Metzgerei
		return true;
	}

in metzgerei steht dann ca folgendes

Code:
public void changeGewicht(double gewichtNew) {
		if (wurstTypen.contains(wurstTyp+"\t"+gewicht)){
			wurstTypen.remove(wurstTyp+"\t"+gewicht);
			wurstTypen.add(wurstTyp+"\t"+gewichtNew);		
		}
	}

ungefähr so

puh hoffentlich ist das nicht alles viel zu unübersichtlich...
 
also ein fehler ist schon mal das du die methode setGewicht nicht richtig implementiert hast, du hast sie als static implementiert aber in deiner abstracten klasse ist sie nicht static...
 
ja aber das war jetzt nur bei dem versuch alles auf Static umzuändern
hab ich dort noch nicht rückgängig gemacht
 
hmm, ich weiss nicht ob ich gerade auf dem schlauch stehe, aber mich verwirrt dein code ein wenig, changeGewicht bekommt als wert ein double, sollte da nicht auch noch der wurst typ rein? normaler weise wuerde man die setGewicht dazu verwenden die instanzvariable gewicht zu setzen..
 
ich versteh auch nicht wieso du nen boolean zurück willst bei setGewicht

normal sieht so eine set methode wie folgt aus

Code:
public class Salami extends Wurst {  

	private double gewicht =8.00;

	public void setGewicht(double gewicht){
                         this.gewicht = gewicht;    }
}

deine implementierung ist etwas wirsch oder ich versteh den zusammenhang nicht genau
 
Zurück