[RESOLVIDO] Subclasse Indireta

3 respostas
Paulomv

salve, salve!

Tenho a classe “BasePlusCommissionEmployee” que estende a classe CommissionEmploye, que por vez estende a classe Employee, porém nao estou conseguindo rodar o MAIN devido ao erro abaixo:

run: Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - constructor BasePlusCommissionEmployee in class iniciando.BasePlusCommissionEmployee cannot be applied to given types; required: java.lang.String,java.lang.String,java.lang.String,double,double,double found: java.lang.String,java.lang.String,java.lang.String,double,int reason: actual and formal argument lists differ in length at iniciando.Iniciando.main(Iniciando.java:74) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)

Classe MAIN

public static void main(String[] args) {
                        
       SalariedEmployee salariedEmployee = new SalariedEmployee(
       "John", "Smith", "111-111-1111", 800.00);
       HourlyEmployee hourlyEmployee = new HourlyEmployee(
       "Karen", "Price", "222-222-2222", 16.75, 40);
       ComissionEmployee comissionEmployee = new ComissionEmployee(
       "Sue", "Jones", "333-333-3333", 10000, .06);
       BasePlusCommissionEmployee basePlusCommissionEmployee = new 
               BasePlusCommissionEmployee("Bob", "Lewis", "444-444-4444",
               .04, 300);
       
       System.out.println("Employeses processed individually: \n");
       
       System.out.printf("%s\n%s: $%,.2f\n\n", salariedEmployee, "Earned",
               salariedEmployee.earnings());
       System.out.printf("%s\n%s: $%,.2f\n\n", hourlyEmployee, 
               "Earned", hourlyEmployee.earnings());
       System.out.printf("%s\n%s: $%,.2f\n\n",
               comissionEmployee, "earned", comissionEmployee.earnings());
       System.out.printf("%s\n%s: $%,.2f\n\n",
               basePlusCommissionEmployee.earnings());
       
       Employe[] employees = new Employe[4];
       
       employees[0] = salariedEmployee;
       employees[1] = hourlyEmployee;
       employees[2] = comissionEmployee;
       employees[3] = basePlusCommissionEmployee;
        
       System.out.println("Employee processed polymorphically:\n");
       
       for (Employe currentEmploye : employees){
       
           System.out.println(currentEmploye);
           
           if (currentEmploye instanceof BasePlusCommissionEmployee){
           
              BasePlusCommissionEmployee employee = (
                      BasePlusCommissionEmployee) currentEmploye;
              
              employee.setBaseSalary(1.10 * employee.getBaseSalary());
              
              System.out.printf("new base salary with 100% increase is: $%,.2f",
                      employee.getBaseSalary());
              
           }
           
           System.out.printf("earnead $%,.2f\n\n", currentEmploye.earnings());
           
       }
       
       for(int j = 0; j < employees.length; j++)
           System.out.printf("Employee %d is a %s\n", j, 
                   employees[j].getClass().getName());
       
       }

BasePlusCommissionEmployee:

package iniciando;

public class BasePlusCommissionEmployee extends ComissionEmployee{
    
  private double baseSalary;
  
  public BasePlusCommissionEmployee (String first, String last, String ssn,
           double sales, double rate, double salary){
  
      super(first, last, ssn, sales, rate);
      setBaseSalary(salary);
  
  }
  
  public void setBaseSalary(double salary){
  
      baseSalary = (salary < 0.0 ) ? 0.0 : salary;
  }
  
  public double getBaseSalary(){

    return baseSalary;
}
  @Override
    public double earnings(){
  
      return getBaseSalary() + super.earnings();
  }
  
  @Override
  public String toString(){
  
      return String.format("%s %s: %s: $%,.2f",
              "baxse-salaried", super.toString(),
              "base salary", getBaseSalary());
  }
}

ComissionEmploye:

package iniciando;

/**
 *
 * @author paulomv
 */
public class ComissionEmployee extends Employe{
    
    private double grossSales;
    private double commissionRate;
    
    public ComissionEmployee(String first, String last, String ssn,
            double sales, double rate){
    
        super(first, last, ssn);
        setGrossSales(sales);
        setComissionRate(rate);
    }
    
    public void setComissionRate(double rate){
    
        commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;
        
    }
    
    public double getComissionRate(){
    
        return commissionRate;
    }
    
    public void setGrossSales(double sales){
    
        grossSales = (sales < 0.0) ? 0.0 : sales;
    }
    
    public double getGrossSales(){
    
        return grossSales;
    }
    
    @Override
    public double earnings(){
    
        return getComissionRate() * getGrossSales();
    }
    
    @Override
    public String toString(){
    
        return String.format("%s: %s\n%s: $%,.2f: %s: %.2f",
                "commission employee", super.toString(),
                "gross sales", getGrossSales(),
                "commission rate", getComissionRate());
        
    }
    
    
}

alguém pode me ajudar?

3 Respostas

Paulomv

Ninguém ??? =\

Roselito_Favero_da_S

O erro que você postou diz tudo: você passou parâmetros para o construtor da classe que não correspondem à lista dele. De acordo com o log, o construtor está esperando duas strings e três doubles, e você passou três strings, um double e um int…

Paulomv

valeu meu brother!

Criado 5 de novembro de 2013
Ultima resposta 11 de nov. de 2013
Respostas 3
Participantes 2