Вызов суперкласса в основном методе - PullRequest
0 голосов
/ 12 февраля 2020

Я только что узнал о суперклассах и подклассах, и домашняя работа довольно проста: есть 2 класса и тестовый класс для вызова и печати атрибутов. Ниже мой код из всех 3 классов. Мой вопрос: почему атрибуты отдела не печатаются в моем главном? Все остальное печатается просто отлично, я просто не могу распечатать последний кусочек. Я думаю, что это как-то связано с супер ... заранее спасибо! Второй компьютерный курс, и я, наконец, чувствую, что вроде как получил его, так что это улучшение по сравнению с первым классом, который я взял!


public class Employee {

    private String firstName;
    private String lastName;
    private int employeeID;
    private double salary;

    public Employee () {

        firstName = null;
        lastName = null;
        employeeID = 0;
        salary = 0.00;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getEmployeeID() {
        return employeeID;
    }

    public double getSalary() {
        return salary;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setEmployeeID(int employeeID) {
        this.employeeID = employeeID;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String employeeSummary () {
        String employeeSummary = "Employee's name is: " + getFirstName() + " " + getLastName() +
                    ". The employee's ID number is " + getEmployeeID() + 
                    ". The employee's salary is " + getSalary();
        System.out.println(employeeSummary);
        return employeeSummary;
    }

}


public class Manager extends Employee {

    private String departmentA;

    public Manager() {
        super();
        departmentA = null;
    }

    public String getDepartmentA() {
        return departmentA;
    }

    public void setDepartmentA(String departmentA) {
        this.departmentA = departmentA;
    }

    public void EmployeeSummary() {
        super.employeeSummary();
        System.out.println("The employee's department is " + departmentA);
    }
}


public class ManagerDerivation {

    public static void main(String[] args) {
        Manager person = new Manager();

        person.setFirstName("Ron");
        person.setLastName("Weasley");
        person.setEmployeeID(2345);
        person.setSalary(65000.00);
        person.setDepartmentA("Department of Magical Law Enforcement");
        person.employeeSummary();

    return;

    }

}

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Имена методов чувствительны к регистру. EmployeeSummary() не переопределяет employeeSummary(), поскольку использует другое имя.

Чтобы избежать подобных ошибок, всегда включайте аннотацию @Override в переопределенных методах. Если вы включите эту аннотацию и допустите ошибку в сигнатуре метода, компиляция завершится неудачей.

Обратите также внимание, что типы возвращаемых данных для этих двух методов различны (String и void). Переопределенные методы должны иметь совместимые типы возврата.

0 голосов
/ 12 февраля 2020

Есть некоторые орфографические (employeeSummary vs. EmployeeSummary) ошибки и типы возврата не совпадают, в Employee должно быть

public void employeeSummary () {
    String employeeSummary = "Employee's name is: " + getFirstName() + " " + 
    getLastName() +
                ". The employee's ID number is " + getEmployeeID() + 
                ". The employee's salary is " + getSalary();
    System.out.println(employeeSummary);   
}

, затем в Manager

public void employeeSummary() {
    super.employeeSummary();
    System.out.println("The employee's department is " + departmentA);
}
...