Abstrakte Klasse

Need_Help1993

Bekanntes Mitglied
Huhu liebes Java-Forum.
Ich habe eine Abstrakte Klasse gegeben, und soll nun in einer 2. Klasse die abstrakten Methoden und einen Konstruktor implementieren. Habe das ganze jetzt auch gemacht, aber Eclipse zeigt mir einige Fehler an, mit denen ich nichts anfangen kann. wäre nett, wenn mal jemand von euch drüberschauen könnte :)

Die Methode behaelterTyp soll z.B. wie in meinem Fall Wassertonne zurückgeben, die Methode einheit in meinem Fall Liter.

Das hier ist meine Klasse:
Java:
public class Wassertonne extends Behaelter {
	
   private String Einheit, Typ;     
	   
	   // Konstruktor
	   Wassertonne (String Einheit, String Typ)         
	      {
		  this.Einheit = Einheit;
	      this.Typ = Typ;
	      }
	      			
	//Objektmethoden
		String behaelterTyp(){return Typ;}
		String einheit(){return Einheit;}		
}

und das hier ist die vorgegebene abstrakte Klasse


Java:
/**

public abstract class Behaelter
{
    /** Maximum content that fits into the container. */
    private double maxVolumen;
    /** Current volume of the content in the container. */
    private double fuellstand;
    /** Description of the content. */
    private String inhalt;

    /**
     * The constructor initializes the maximum content with the given
     * amount. A newly constructed container is always empty.
     */
    public Behaelter(double maxVolumen)
    {
        this.maxVolumen = maxVolumen;
        this.fuellstand = 0;
        inhalt = "nichts";
    }

    /**
     * Returns the type of the container as a String. An example would
     * be the String "drinking glass".
     */
    abstract String behaelterTyp();
    
    /**
     * Returns the unit of measurement of the container's content as a
     * String. An example would be the String "Milliliter".
     */
    abstract String einheit();

      public void befuelleMit(String inhalt, double menge)
    {
        this.inhalt = inhalt;
        fuellstand = menge;
        if (fuellstand < 0)
            fuellstand = 0;
        if (fuellstand > maxVolumen)
            fuellstand = maxVolumen;
    }

    /**
     * Prints the container type, the current and the maximum volume,
     * the unit of measurement and the description of the content on
     * the screen.
     */
    public void ausgabe()
    {
        System.out.println("Hallo! Ich bin Behaelter vom Typ \"" + behaelterTyp()+ "\".");
        System.out.print("Ich enthalte gerade " + fuellstand + " von maximal ");
        System.out.println(maxVolumen + " " + einheit() + " " + inhalt + ".");
    }
}
 

faetzminator

Gesperrter Benutzer
Du musst noch [c]maxVolumen[/c] setzen. Dies kannst du am Anfang deines Konstruktors mit [c]super(double);[/c] machen. Du solltest auf die Codeconventions achten. Variablen schreibt man [c]fooBarBaz[/c] und nicht [c]FooBarBaz[/c]. Und es gibt Getter und Setter Methoden, [c]T getFooBarBaz()[/c] und [c]setFooBarBaz(T)[/c].
 
K

kurt251

Gast
2 Sachen fallen sofort ins Auge:

1. Deine Klasse "Behaelter" beginnt mit einem geöffneten Kommentar, welcher nirgendwo geschlossen wird.

2. Der Konstruktor deiner Klasse "Wassertonne" ruft nicht den Konstruktor von "Behaelter" auf

Das sind aber beides Sachen, die du einfach nur durch das Lesen der Fehlermeldungen und der Syntax-Hervorhebungen im Eclipse-Editor selbst herausgefunden hättest.
 

Need_Help1993

Bekanntes Mitglied
ok,. also fehlt quasi nur noch das MaxVolumen? - (so returnt es doch Typ anstelle von Wassertonne doer nicht?)

so?
Java:
public class Wassertonne extends Behaelter {
    
   String Einheit, Typ;     
   double maxVolumen;
       
       // Konstruktor
       Wassertonne (String Einheit, String Typ, double maxVolumen)         
          {
          this.Einheit = Einheit;
          this.Typ = Typ;
          super.maxVolumen = maxVolumen
          }
                    
    //Objektmethoden
        String behaelterTyp(){return Typ;}
        String einheit(){return Einheit;}       
}
 

Need_Help1993

Bekanntes Mitglied
okay, ich soll den Konstruktor aber nur für die neue Klasse erstellen.
Die Konstruktoren der Klasse Behaelter sind sowieso Private, auf die kann ich aus der anderen Klasse überhaupt nicht zugreifen, soweit ich weiß (und Eclipse sagt)
 
K

kurt251

Gast
okay, ich soll den Konstruktor aber nur für die neue Klasse erstellen.
Die Konstruktoren der Klasse Behaelter sind sowieso Private, auf die kann ich aus der anderen Klasse überhaupt nicht zugreifen, soweit ich weiß (und Eclipse sagt)
Weißt du überhaupt, was du tust, und verstehst du, was Eclipse dir sagt, oder rätst du jetzt nur rum? Dieser Konstruktor ist ja wohl eindeutig public:
Java:
/**
 * The constructor initializes the maximum content with the given
 * amount. A newly constructed container is always empty.
 */
public Behaelter(double maxVolumen)
{
    this.maxVolumen = maxVolumen;
    this.fuellstand = 0;
    inhalt = "nichts";
}
 

Need_Help1993

Bekanntes Mitglied
sry, ist mir auch gerade aufgefallen.
aber um erhlich zu sein weiß ich nicht, wie ich den Konstruktor mit super in den anderen einbinden soll.
 

Need_Help1993

Bekanntes Mitglied
Java:
	   // Konstruktor

   Wassertonne (String Einheit, String Typ)         
	      {
		  super(maxVolumen); 
		  this.Einheit = Einheit;
	      this.Typ = Typ;
	      }

?
field Behaelter.maxVolumen is not visible
 

faetzminator

Gesperrter Benutzer
Natürlich musst du entweder deinen Konstruktor zu [c]Wassertonne (String Einheit, String Typ, double maxVolumen)[/c] anpassen oder einen Fixwert übergeben: [c]super(6345);[/c].
 

Need_Help1993

Bekanntes Mitglied
ich habs :)
Java:
   Wassertonne (String Einheit, String Typ, double maxVolumen)         
	      {
		  super(maxVolumen);
		  this.Einheit = Einheit;
	      this.Typ = Typ;
	      }
 

Need_Help1993

Bekanntes Mitglied
aber ich habe immernoch eine graue Warnung die mir sagt:
Implicit super constructor Behaelter() is undefined. Must explicitly invoke another constructor

aber wir haben doch jetzt nen anderen Konstruktor mit drin?
 

Need_Help1993

Bekanntes Mitglied
jetzt soll ich noch ein kleines Testprogramm erstellen, dass eine Instanz meiner Klasse erzeugt und die bereits implementierten Methoden befuelleMit und ausgabe nacheinander aufruft...

sieht bei mir folgendermaßen aus:
Java:
public class Testklasse extends Wassertonne{
	

	String einheit(){
	 }
	String behaelterTyp(){
	 }

public static void main(String[] args){
	Testklasse tk = new Testklasse();
	
	tk.befuelleMit();
	tk.ausgabe();
	}	
}
und ja, ich weiß selbst, dass es so nicht funktioniert ;)
also bitte ich um tipps, und nicht um beleidigungen :)
 
K

kurt251

Gast
Naja, mit einer Testklasse hat das ja wohl eher nix zu tun (nix für ungut, aber von JUnit und Co wirst du sicherlich noch nicht mal gehört haben).

Nur 2 Sachen:
Java:
Testklasse extends Wassertonne
ist sinnfrei. Deine "Testklasse" macht etwas mit Wassertonnen, sie ist aber keine! Also diese sinnlose Vererbung einfach weglassen

Und benutzen tust du eine Wassertonne indem du logischerweise eine Wassertonne instanziierst und mit der was machst. Also
Java:
Behaelter tonne = new Wassertonne(...);
tonne.macheIrgendwas();
...
 

Need_Help1993

Bekanntes Mitglied
Java:
public class Testklasse {
	

	String einheit(){
	 }
	String behaelterTyp(){
	 }

public static void main(String[] args){
	Behaelter tonne = new Wassertonne(Liter, Wassertonne, 500, 0, Wasser );
	
	tonne.befuelleMit();
	tonne.ausgabe();
	}	
}

so sieht die sache schon besser aus.... aber auch nur unwesentlich (was die fehlermeldungen angeht)

Java:
public class Wassertonne extends Behaelter {
	
   String Einheit, Typ;
   
   
	   
	// Konstruktor
    Wassertonne (String Einheit, String Typ, double maxVolumen)         
	      {
		  super(maxVolumen);
		  this.Einheit = Einheit;
	      this.Typ = Typ;
	      }
    public void ausgabe(){
}
		      			
	//Objektmethoden
		String behaelterTyp(){return Typ;}
		String einheit(){return Einheit;}		
}
 

insane80

Aktives Mitglied
Was Du hier dem Konstruktor übergibst
[JAVA=10]Behaelter tonne = new Wassertonne(Liter, Wassertonne, 500, 0, Wasser );[/code]
passt nicht zum Konstruktor der Wassertonnen-Klasse
Java:
Wassertonne (String Einheit, String Typ, double maxVolumen)
 

Need_Help1993

Bekanntes Mitglied
ja, aber wieso den?
String Einheit = Liter, String Typ = Wassertonne
double max Volumen ist ja der Konstruktor der abstrakten Klasse. und der Beinhaltet maximale Füllung, füllmenge und Inhalt.
Also müsste das doch so stimmen?
oder wie müsste es richtig lauten?
 

insane80

Aktives Mitglied
Weil dafür
Code:
Behaelter tonne = new Wassertonne(Liter, Wassertonne, 500, 0, Wasser );
der Konstruktor z. B. so aussehen müsste:
Code:
public Wassertonne(String, String, int, int, String)
oder statt int in diesem Fall auch double.

Abgesehen davon musst Du einen String in Anführungsstrichen übergeben.
 
Zuletzt bearbeitet:

Need_Help1993

Bekanntes Mitglied
okay, aber wie gebe ich dan den Inhalt (z.B. Wasser) an? der steht eigentlich mit im Konstruktor der abtsrakten Klasse, die ich aber laut meinem neuen konstruktor nur als double aufrufen kann?
 

compuwurml

Mitglied
okay, aber wie gebe ich dan den Inhalt (z.B. Wasser) an? der steht eigentlich mit im Konstruktor der abtsrakten Klasse, die ich aber laut meinem neuen konstruktor nur als double aufrufen kann?

Wenn die Variable 'Inhalt' in der Oberklasse den Datentyp double referenziert, änder das ganze doch einfach in einen String? :rtfm: Oder meinst du die Reihenfolge im Konstruktor von Wassertonne? Die ist ja egal und frei wählbar, da Konstruktoren nicht vererbt werden. Es ist lediglich wichtig das die Paremeterliste beim keyword super(parameterliste) mit den Datentypen des Vaterkonstruktor übereinstimmt. Du leitest das ganze ja weiter.

Java:
Wassertonne (string inhalt) {  // <-- Reihenfolge der Parameter frei wählbar.
super(inhalt); // <-- hier Reihenfolge von Datentypen wie im Vaterkonstruktor.
}
 
Zuletzt bearbeitet:

Need_Help1993

Bekanntes Mitglied
funktioniert so aber nicht wirklich...
das hier ist der Konstruktor der Abtrakten Klasse
Java:
    public Behaelter(double maxVolumen)
    {
        this.maxVolumen = maxVolumen;
        this.fuellstand = 0;
        inhalt = "nichts";

das hier der Konstruktor meiner Unterklasse (die von der abstrakten Klasse erbt)
Java:
    Wassertonne (String Einheit, String Typ, double maxVolumen, double fuellstand, String Inhalt)         
	      {
		  super(maxVolumen);
		  super(inhalt);
		  this.Einheit = Einheit;
	      this.Typ = Typ;
	      }

und das hier ist jetzt der Versuch eine Instanz davon zu erstellen
Java:
public static void main(String[] args){
	Behaelter tonne = new Wassertonne("Liter", "Wassertonne", 500, 0, "Wasser" );

aber so funktioniert es nicht... (man kann doch überhaupt keine 2 super in einem Konstruktor verwenden? ...
da liegt auch mein problem. der Konstruktor der Abtrakten Klasse wird als double definiert, obwohl ein String drin ist? ... da steige ich noch nicht durch...
 

insane80

Aktives Mitglied
Nein, super geht nur einmal.

Deine Oberklasse hat ja auch keinen Konstruktor, der einen String nimmt. Nur einen, der einen double-Wert entgegennimmt.
Code:
public Behaelter(double maxVolumen)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben