2016-03-26 14 views
1
public void setName (String n){} 
public void setAfm (String a){} 

Dies sind die Superklassen-Methoden, die ich aufrufen muss.Wie kann ich eine Superklassenmethode in einer Unterklasse verwenden java

SalariedEmployee(){ 
    name = super.setName(String n); 
    afm = super.setAfm(String a); 
    salary = payment(); 

Und das ist der Konstruktor in der Unterklasse. Wie kann ich die Methoden richtig aufrufen? Ich möchte keine Parameter in SalariedEmployee verwenden, ich möchte den Namen und Afm mit den Superklassenmethoden festlegen. Aber meine Methoden sind ungültig. Also ich denke, ich muss das richtig ändern? Oder vermisse ich etwas anderes? Vielen Dank im Voraus!

+0

Sie scheinen verwirrt zu sein, die Setter sind 'void', also können Sie nicht' name = ',' afm = 'sagen (und ich habe keine Ahnung von' Zahlung'). Zweitens geben Sie nicht den Typ im Aufruf an - Sie geben einen Wert 'super.setName (" A Name ");' Und Sie * müssen * nicht sagen 'super.'; es genügt, 'setName (" A Name ") zu sagen;' –

Antwort

1

EDIT: Sie können auch Setter verwenden. Das Schlüsselwort "super" ist nur dann obligatorisch, wenn Sie eine Methode aus der Oberklasse aufrufen möchten, die Sie in der Unterklasse überschrieben haben.

Sie sollten Konstrukteure verwenden Anfangswerte zu setzen, sondern auch eine mögliche Lösung Setter ist mit:

class Employee { 
    String name; 
    String afm; 

    public Employee() { 
    } 
    public Employee(String name, String afm) { 
     super(); 
     this.name = name; 
     this.afm = afm; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setAfm(String afm) { 
     this.afm = afm; 
    } 

} 

class SalariedEmployee extends Employee { 
    //Using constructors 
    public SalariedEmployee(String name, String afm) { 
     super(name, afm); 
     salary = payment(); 
    } 
    //using setters 
    public SalariedEmployee() { 
     setAfm("afm"); 
     setName("name"); 
     salary = payment(); 
    } 
} 

Auch eine Setter-Methode wie ‚setName‘ nichtig sein sollte, weil Sie es nicht erwarten etwas zurück im Gegensatz zu eine Getter-Methode wie 'getName' zum Beispiel.

+0

Das habe ich ursprünglich geschrieben. In der Mitarbeiterklasse tho musste ich diese Methoden schreiben (das ist die Anleitung). Also habe ich darüber nachgedacht, sie zu benutzen.Also, was Sie sagen, ist, dass ich keine Initialwerte mit diesen Superklassen-Methoden setzen kann? –

0

Es gibt zwei Fälle, in denen Sie eine super Methode aufrufen möchten. Der erste Fall ist, dass die Methode nicht von der Unterklasse überschrieben wurde. Wenn das der Fall ist, können Sie diese Methoden rufen Sie einfach durch den Aufruf

setName("Dick Aceman"); 

oder

setAtf("Acebook"); 

Es ist mehr beschreibend, wenn man sie wie folgt aufrufen:

this.setName("Dick Aceman"); 
this.setAtf("Acebook"); 

Der kugelsicher Weg um sie anzurufen ist dies:

super.setName("Dick Aceman"); 
super.setAtf("Acebook"); 

Diese letzte Funktion funktioniert auch, wenn die Methoden überschrieben wurden, aber im Allgemeinen wird sie als zu beschreibend betrachtet. Daher sollte diese Art von Methodenaufruf nur verwendet werden, wenn es keine Alternative gibt. Beachten Sie, dass die Methoden, da sie öffentlich sind, von Unterklassen geerbt werden.

Die Probleme mit Ihrem Versuch waren:

  • Sie den return Wert der Methoden Variablen zuweisen versucht, wenn die Methoden
  • Sie die Art bei Methodenaufruf nicht Werte zurückgeben erklärt, die ungültig ist
  • Sie die nicht definierte Variablen von a und n

Sie sollten ein paar Tutorial vi sehen verwendet Deos bekommen Sie dann die Grundlagen. Nachdem Sie sich ein oder zwei Videos angeschaut haben, sollten Sie zu dieser Antwort zurückkehren.

Verwandte Themen