PDA

Visualizza la versione completa : [JAVA] Errore sconosciuto :D


peppe79
16-01-2004, 01:54
non capisco dov'è l'errore:

No constructor matching Person() found in class Person.

il codice che voglio compilare è questo:

(file: Mitglied.java)


public class Mitglied extends Person{
protected String Eintrittsdatum;
protected double Mitgliedsbeitrag;
protected String OutputMitglied;

public Mitglied(String Eintrittsdatum, double Mitgliedsbeitrag){
this.Eintrittsdatum = Eintrittsdatum;
this.Mitgliedsbeitrag = Mitgliedsbeitrag;
super(PersonalNummer, Nachname, Vorname, Alter, Gehalt, MitgliedVerify);
}

public String getMitglied(){
this.OutputMitglied = "Eintrittsdatum: " + this.Eintrittsdatum + "\n";
this.OutputMitglied += "Vorname: " + this.Vorname + "\n";
this.OutputMitglied += "Mitgliedsbeitrag: " + this.Mitgliedsbeitrag + " EURO\n";
return this.OutputMitglied;
}
}


è scritto in tedesco :stordita: , ma è intuitivo dai :dottò:

Angelo1974
16-01-2004, 10:27
Ciao. Allora quando tu crei una sottoclasse da una classe la parola super deve essere la prima che appare nel costruttore. Ad esempio:

public class Prova{
public String name;
public Prova( String nome ){
name = nome;
}
}

public class Prova2{
public String cognome;

public Prova2( String nome, String cogno ){
cognome = cogno;
super( nome );
ERRATO
}

}


La classe scritte sopra ( + esattamente la Prova2 ) è ERRATA; infatti se il compilatore non trova super( nome ); come prima istruzione, va nella superclasse ( e cioè Prova ) e cerca il costruttore di default ( quello che non accetta parametri in ingresso ); se non lo trova ti da l'errore che hai visto. Se scrivi Prova2 in quasta maniera:

public class Prova2{
public String cognome;

public Prova2( String nome, String cogno ){

super( nome );
cognome = cogno;


}

}

Dovrebbe abdare; tornando al tuo esempio, dovresti, secondo me, scrivere la classe in questa maniera:

public class Mitglied extends Person{
protected String Eintrittsdatum;
protected double Mitgliedsbeitrag;
protected String OutputMitglied;

public Mitglied(String Eintrittsdatum, double Mitgliedsbeitrag){
super(PersonalNummer, Nachname, Vorname, Alter, Gehalt, MitgliedVerify);
this.Eintrittsdatum = Eintrittsdatum;
this.Mitgliedsbeitrag = Mitgliedsbeitrag;
}

public String getMitglied(){
this.OutputMitglied = "Eintrittsdatum: " + this.Eintrittsdatum + "\n";
this.OutputMitglied += "Vorname: " + this.Vorname + "\n";
this.OutputMitglied += "Mitgliedsbeitrag: " + this.Mitgliedsbeitrag + " EURO\n";
return this.OutputMitglied;
}
}

peppe79
16-01-2004, 11:55
ciao,
ho provato a chiamare super() per primo, proprio come hai scritto te ma continua a darmi errore:

Mitglied.java:7: Can't reference PersonalNummer before the superclass constructor has been called.
super(PersonalNummer, Nachname, Vorname, Alter, Gehalt, MitgliedVerify);

l'errore può essere nella classe Person? :master:

Angelo1974
16-01-2004, 12:06
Ma PersonalNummer che oggetto è? Una stringa o cosa? Non lo vedo ne come parametro passato al costruttore ne come variabile della sottoclasse......

peppe79
16-01-2004, 12:10
PersonalNummer è (protected) int ed è dichiarata(?) nella classe Person.

questa è la classe Person, così forse ti è più chiaro:



public class Person{
protected int PersonalNummer;
protected String Nachname;
protected String Vorname;
protected int Alter;
protected double Gehalt;
protected boolean MitgliedVerify;
protected String Output;

public Person(int PersonalNummer, String Nachname, String Vorname, int Alter, double Gehalt, boolean MitgliedVerify){
this.PersonalNummer = PersonalNummer;
this.Nachname = Nachname;
this.Vorname = Vorname;
this.Alter = Alter;
this.Gehalt = Gehalt;
this.MitgliedVerify = MitgliedVerify;
}

public String getPerson(){
this.Output = "Personalnummer: " + this.PersonalNummer + "\n";
this.Output += "Vor- und Nachname: " + this.Vorname + " " + this.Nachname + "\n";
this.Output += "Alter: " + this.Alter + "\n";
this.Output += "Gehalt: " + this.Gehalt + " EURO\n";
this.Output += "[ Mitglied: " + this.MitgliedVerify + " ]\n";

if(this.MitgliedVerify == true){
this.Output += "test\n";
}
else{
this.Output += "";
}
return this.Output;
}
}

Angelo1974
16-01-2004, 12:16
Allora, partendo dal presupposto che non so cosa tu debba fare, io farei, per fare un esempio:


public class Mitglied extends Person{
protected String Eintrittsdatum;
protected double Mitgliedsbeitrag;
protected String OutputMitglied;

public Mitglied(String Eintrittsdatum, double Mitgliedsbeitrag){

super( 08133334,"Angelo","1974",29,5.0,true );
this.Eintrittsdatum = Eintrittsdatum;
this.Mitgliedsbeitrag = Mitgliedsbeitrag;
}

public String getMitglied(){
this.OutputMitglied = "Eintrittsdatum: " + this.Eintrittsdatum + "\n";
this.OutputMitglied += "Vorname: " + this.Vorname + "\n";
this.OutputMitglied += "Mitgliedsbeitrag: " + this.Mitgliedsbeitrag + " EURO\n";
return this.OutputMitglied;
}
}

Così deve andare, spero :adhone: Ciao :ciauz:

peppe79
16-01-2004, 12:20
dici che devo scrivere i valori direttamente in super()? :master: allora dov'é la comodità delle variabili? :dhò:

Angelo1974
16-01-2004, 12:31
Allora se non vuoi scrivere le variabili devi fare:

public Mitglied(int PersonalNummer, String Nachname, String Vorname, int Alter, double Gehalt, boolean MitgliedVerify,String Eintrittsdatum, double Mitgliedsbeitrag){

super(PersonalNummer, Nachname,Vorname,Alter, Gehalt,MitgliedVerify);
this.Eintrittsdatum = Eintrittsdatum;
this.Mitgliedsbeitrag = Mitgliedsbeitrag;
}
.
.
.
.
.
.

Solo così utilizzerai la comodità delle variabili, se no il compilatore che ne a che valoti deve mettere le variabili della superclasse? E' vero che i linguaggi sono evoluti ma........ :p

peppe79
16-01-2004, 12:39
lo facevo più intelligente sto Java :stordita:
grazie, funziona benissimo :metallica

Loading