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

Это методы Суперкласса, которые мне нужно вызвать.Как я могу использовать метод суперкласса в подклассе java

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

И вот конструктор в подклассе. Как я могу правильно вызвать методы. Я не хочу использовать какие-либо параметры в SalariedEmployee, я хочу установить имя и afm с помощью методов суперкласса. Но мои методы недействительны. Так что, наверное, мне нужно изменить это право? Или я пропустил что-то еще? Спасибо заранее!

+0

Вы, кажется, смущены, сеттеры 'void', поэтому вы не можете сказать' name = ',' afm = '(и я понятия не имею о' оплате'). Во-вторых, вы не указываете тип в вызове - вы указываете значение 'super.setName (« A Name »);' И вам не нужно * говорить 'super.'; достаточно сказать 'setName (« A Name »);' –

ответ

1

EDIT: вы также можете использовать сеттеры. Ключевое слово «super» является обязательным, только если вы хотите вызвать метод из суперкласса, который вы переопределили в подклассе.

Вы должны использовать конструктор, чтобы установить начальные значения, но с использованием сеттеров являются возможным решением также:

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(); 
    } 
} 

Также метод установки, как «SetName» должен быть недействительным, потому что вы не ожидаете, что она ничего возвращать в отличие от например, метод getter, например getName.

+0

Это то, что я изначально написал. В классе Employee tho мне нужно было написать эти методы (это инструкции). Поэтому я подумал об их использовании.Итак, что вы говорите, я не могу установить начальные значения с помощью этих методов суперкласса? –

0

Существует два случая, когда вы хотите вызвать метод super. Первый случай заключается в том, что этот метод не был переоценен подклассом. Если это так, то вы можете вызывать эти методы просто по телефону

setName("Dick Aceman"); 

или

setAtf("Acebook"); 

Это является более описательным, если вы их называете, как это:

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

пуленепробиваемого путь для их вызова:

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

Эта последняя работает, даже если методы были переопределены, но в целом она считается слишком описательной, поэтому этот вызов метода должен использоваться только тогда, когда альтернативы нет. Обратите внимание, что, поскольку ваши методы являются общедоступными, они наследуются подклассами.

Проблемы с вашей попытки были таковы:

  • вы пытались присвоить значение return методов к переменным, когда методы не возвращают значения
  • вы объявили тип при вызове метода, который недопустимый
  • вы использовали неопределенные переменные из a и n

вы должны смотреть несколько учебников VI deos, вы получите основы. После просмотра такого видео или двух вы должны вернуться к этому ответу.

Смежные вопросы