2015-01-20 2 views
0

У меня вопрос, где у меня есть суперкласс (Employee), который реализует интерфейс, содержащий только 1 метод, следующим образом.Вызов метода в подклассе

public interface Payable 
{  
    double getPaymentAmount(); // calculate payment; no implementation 
} 

У меня есть несколько подклассов, которые наследуют от работника (например SalariedEmployee, HourlyEmployee, CommissionEmployee), каждый из которых содержит метод прибыли.

Мне было предложено «изменить класс Employee для реализации интерфейса. Платить и объявить метод getPaymentAmount для вызова доходов метода. Метод getPaymentAmount затем будет наследоваться подклассами иерархии Employee. Когда getPaymentAmount вызывается для определенного подкласса объект, он полиморфно вызывает соответствующий метод заработка для этого подкласса ».

Может ли кто-нибудь помочь мне в этом, как это сделать? Как вызвать соответствующий метод для заработка в методе класса Employee getPaymentAmount без редактирования подклассов?

Я относительный новичок в Java, так что все оцененная помощь

Соответствующая часть класса Employee выглядит следующим образом:

public abstract class Employee implements Payable 
{ 
    private String firstName; 
    private String lastName; 
    private String socialSecurityNumber; 

    // three-argument constructor 
    public Employee(String first, String last, String ssn) 
    { 
     firstName = first; 
     lastName = last; 
     socialSecurityNumber = ssn; 
    } // end three-argument Employee constructor 
    //getters, settters, toString override etc have been deleted. 
    public double getPaymentAmount() 
    { 
     ???? //This is what I need help with.   
    } 

} // end abstract class Employee 

и принимая 1 пример подкласса:

public class SalariedEmployee extends Employee 
{ 

    private double weeklySalary; 

    // four-argument constructor 
    public SalariedEmployee(String first, String last, String ssn, double salary) 
    { 
     super(first, last, ssn); // pass to Employee constructor 
     setWeeklySalary(salary); // validate and store salary 
    } // end four-argument SalariedEmployee constructor 

    @Override 
    public double earnings() 
    { 
     return getWeeklySalary(); 
    } // end method earnings 

} // end class SalariedEmployee 
+1

Помогите вам с чем, _специфично? –

ответ

0

Возможно, это то, что вы ищете? Чтобы добиться полиморфного поведения, пусть ваши различные классы сотрудников имеют разную реализацию для earnings()/getPaymentAmount(). Это приведет к тому, что методы переопределяют его суперкласс, достигая полиморфизма.

class Employee implements Payable 
{ 
    double getPaymentAmount(){ 
     return earnings(); 
    } 
    double earnings(){ 
     //Your other implementations 
     return xxx; 
    } 
} 

class SalariedEmployee extends Employee 
{ 
    double getPaymentAmount(){ 
     return earnings(); 
    } 
    double earnings(){ 
     //Different implementation for different employee tpye 
     return xxx; 
    } 
} 

«Как вызвать соответствующий метод для заработка в методе класса Employee getPaymentAmount?»

Об этом не нужно беспокоиться. Java позаботится об этом для вас. Это основа полиморфизма. Согласно классу объекта, они будут вызывать соответствующие методы.

+0

Эй, спасибо за вашу помощь. Единственная проблема, которую я вижу выше, заключается в редактировании подклассов (например, SalariedEmployee), что и было сказано нам не делать! Поскольку каждый подкласс уже получил реализацию метода earnings(). например @Override общественный двойной доход() { возвращение getWeeklySalary(); } // конец дохода метода – user3600952

+0

@ user3600952 Если вы не публикуете все, что у вас есть, то все, что я могу вам помочь. Я не знал бы, где первоначально был найден доход(), где он должен быть расположен. – user3437460

+0

Эй, спасибо за вашу помощь здесь, я добавил еще код в мой оригинальный пост выше. – user3600952

-1
Employee.java 
======================================================================= 
interface Payable 
{ 
    double getPaymentAmount(); // calculate payment; no implementation 
} 

public abstract class Employee implements Payable{ 
    public double getPaymentAmount() 
    { 
     return 0.0; 
    } 

    public void printSalary() 
    { 

    } 
} 


Teacher.java 
======================================================================= 
public class Teachers extends Employee { 
    public double getPaymentAmount() 
    { 
     return 5; 
    } 

    public void printSalary() 
    { 
     System.out.println("Teachers current salary is: " + getPaymentAmount()); 
    } 

} 

SoftwareEngineer.java 
======================================================================= 
public class SoftwareEngineer extends Employee { 
    public double getPaymentAmount() 
    { 
     return 500; 
    } 

    public void printSalary() 
    { 
     System.out.println("Software Engineers current salary is: " + getPaymentAmount()); 
    } 

} 

TestEmployee.java 
======================================================================= 
public class TestEmployee { 
    public static void main(String s[]) 
    { 
     Employee e = new Teachers(); 
     e.printSalary(); 

     Employee e1 = new SoftwareEngineer(); 
     e1.printSalary(); 
    } 
} 
0

Я думаю, что вы ищете что-то вроде этого:

abstract class Employee implements Payable 
{ 
    double getPaymentAmount(){ 
     return earnings(); 
    } 

    abstract double earnings(); 
} 

class SalariedEmployee extends Employee 
{ 

    double earnings(){ 
     //Different implementation for different employee tpye 
     return xxx; 
    } 
} 

Поскольку вы объявлен abstract метод, называемый earnings, другие методы abstract class могут вызвать этот метод, потому что они знают, что любой экземпляр экземпляра Employee должен иметь реализованный метод earnings.

+0

Это именно то, что я искал! Приветствую Даниэля! – user3600952

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