Vererbung und Konstruktoren

Hallo Leute!

Ich bin zur Zeit dabei ein System zur Lernerfolgskontrolle zu
programmieren, dass unter anderem auch MultipleChoice-Fragen
verarbeiten soll. Dazu habe ich eine Klasse Question.java
(=allgemeine Fragen) geschrieben mit folgendem Konstruktor:

public Question (int questionQID, int questionCatalogueID, int
questionType, String questionTitel, String questionQuestion, String
questionKeywords) {
setValues(questionQID, questionCatalogueID, questionType,
questionTitel, questionQuestion, questionKeywords);
}

In der Methode setValues werden lediglich die Werte in die Variablen
geschrieben. Nun soll die Klasse MultipleChoiceQuestion.java diese
Klasse erweitern. Soweit ich weiß muß ja der Konstruktor komplett neu
geschrieben werden, da er nicht vererbt wird. So sieht das dann aus:

public class MultipleChoiceQuestion extends Question {

public MultipleChoiceQuestion (int questionQID, int
questionCatalogueID, int questionType, String questionTitel, String
questionQuestion, String questionKeywords) {
setValues (questionQID, questionCatalogueID,
questionType, questionTitel, questionQuestion, questionKeywords);
getAnswers();
}

Aber ich erhalte beim Compilen jedesmal die Fehlermeldung:

editor/MultipleChoiceQuestion.java:21:
Question(int,int,int,java.lang.String,java.lang.String,java.lang.Stri
ng) in editor.Question

cannot be applied to ()
public MultipleChoiceQuestion (int questionQID, int
questionCatalogueID, int questionType, String questionTitel, String
questionQuestion, String questionKeywords) {

Irgendwas läuft da offensichtlich bei mir verkehrt. Vielen Dank schon
mal für die Hilfe!

Gruß

Edi

Hallo Edi,

Nehmen wir fürs Beispiel mal an du leitest B von A ab.

Im Laufe der instantierung müssen beide Konstruktoren aufgerufen werden, sowohl B als auch A. Bei Default-Konstruktoren (ohne Parameter) kriegt der Compiler das noch von selbst hin, sonst musst du dich aber darum kümmern. Das geht über das Keyword super:

class A
{
 public A( String s )
 { ... }
}

class B
{
 public B( String s )
 { 
 super( s );
 }
}

Dabei wird jetzt hier der Parameter s von B an A durchgereicht.

Damit ersparst du dir in deinem Fall auch eine Zuweisung der Werte in B, das passiert dann im Konstruktor von A.

Grüße, Robert

class B extends A
Es muss natürlich lauten:

class B extends A

Grüße, Robert