2013-10-25 2 views
1

У меня проблема с java instanceof. У меня есть класс под названием Employee и несколько других, которые расширяют этот, например - Manager. Я также создал другой класс, EmployeeStockPlan, где я хотел проверить, является ли instanceof обнаружением того, какой объект я использую. Но когда я вызываю метод из нового класса, у меня есть эта ошибка: метод grantStock(Manager) не определен для типа Loader. Извините, я как-то новичок в какой-то вещи в java, надеюсь, что я не задаю глупых вопросов.java instanceof метод поиска

Класс Employee:

package com.example.domain; 

public class Employee { 

private int empId; 
private String name; 
private String ssn; 
private double salary; 

public Employee(int empId, String name, String ssn, double salary) { // constructor 
                     // method; 
    this.empId = empId; 
    this.name = name; 
    this.ssn = ssn; 
    this.salary = salary; 
} 

public void setName(String newName) { 
    if (newName != null) { 
     this.name = newName; 
    } 
} 

public void raiseSalary(double increase) { 
    this.salary += increase; 
} 

public String getName() { 
    return name; 
} 

public double getSalary() { 
    return salary; 
} 

public String getDetails() { 

    return "Employee id: " + empId + "\n" + "Employee name: " + name; 


} 

}

Класс менеджер:

package com.example.domain; 

public class Manager extends Employee { 

    private String deptName; 

     public Manager(int empId, String name, String ssn, double salary, String dept) { 
     super(empId, name, ssn, salary); 

    this.deptName = dept; 
} 

public String getDeptName() { 
    return deptName; 
} 

public String getDetails() { 
    return super.getDetails() + "\n" + 
      "Department: " + deptName; 
} 

}

Класс EmployeeStockPlan:

package com.example.domain; 

public class EmployeeStockPlan { 

     public void grantStock(Employee e) { 

       // nothing calculated, just simulating; 
     System.out.println("This is an employee!"); 

    if (e instanceof Manager) { 
     // process Manager stock grant 
     System.out.println("This is a manager!"); 
    } else { 
     // error - instance of Engineer? 
     System.out.println("Not an engineer!"); 
    } 
    return; 
} 

}

Основной класс:

EmployeeStockPlan esp = new EmployeeStockPlan(); 
    Manager m = new Manager (12421, "Manager1", "111-4254-521", 2430, "Marketing1"); 
    grantStock(m); 
+2

Это должно быть 'esp.grantStock (м);' –

+4

'InstanceOf' не 'найти методы. У вас есть основное недоразумение где-то. – EJP

ответ

6
EmployeeStockPlan esp = new EmployeeStockPlan(); 
Manager m = new Manager (12421, "Manager1", "111-4254-521", 2430, "Marketing1"); 
grantStock(m); 

Вы должны вызвать grantStock() метод на EmployeeStockPlan объекта, в противном случае Java будет искать его в главном классе, который Безразлично» t имеет этот метод.

esp.grantStock(m); 
+1

duplicated anwser by me, вы быстрее :) +1 затем –

+0

@ X-Pippes Это не дубликат вашего ответа. Твоя ложь утверждала, что ему нужно создать экземпляр класса, который он уже создавал. – EJP

+0

Вот и все, спасибо, Jesper! –