Я не могу понять, почему мое наследование Java не работает - PullRequest
1 голос
/ 03 апреля 2012

Для домашней работы я работаю со следующими тремя классами.

 Class           | Extends         | Variables
 --------------------------------------------------------
 Person          | None            | firstName, lastName, streetAddress, zipCode, phone
 CollegeEmployee | Person          | ssn, salary,deptName
 Faculty         | CollegeEmployee | tenure(boolean)

У меня проблемы с тем, чтобы конструктор факультета правильно использовал данные в суперклассах.

 import java.util.*;
 import javax.swing.*;
 public class Faculty extends CollegeEmployee
 {
      protected String booleanFlag;
      protected boolean tenured;  
      public Faculty(String firstName, String lastName, String streetAddress, 
                     String zipCode, String phoneNumber, String ssn,
                     String department, double salary)
      {
           super(firstName,lastName,streetAddress,zipCode,phoneNumber,  
                 department,ssn,salary);
           String booleanFlag = JOptionPane.showInputDialog(null, "Tenured (Y/N)?");
           if(booleanFlag.equals("Y"))
              tenured = true;
           else
              tenured = false;
      }
      public void setTenure(boolean tenured)
      {  this.tenured = tenured;   }
      public boolean getTenured()
      {  return tenured;  }
      public void display()
      {
          super.display();
          JOptionPane.showMessageDialog(null, "Tenured: " + tenured);
      }
 }

Класс CollegeEmployee, из которого происходит Faculty, отображается ниже.

 import java.util.*;
 import javax.swing.*;
 public class CollegeEmployee extends Person
 {
     protected String ssn;
     protected String sal;
     protected double annSalary;
     protected String department;
     public CollegeEmployee(String firstName, String lastName, 
                            String streetAddress, String zipCode, 
                            String phoneNumber)
     {
         super(firstName,lastName,streetAddress,zipCode,phoneNumber);
           ssn = JOptionPane.showInputDialog(null, "Enter SSN ");
          department = JOptionPane.showInputDialog(null, "Enter department: ");
          sal = JOptionPane.showInputDialog(null, "Enter salary: ");
          annSalary = Double.parseDouble(sal);
     }  
     public void setFirstName(String firstName)
 {  this.firstName = firstName;  }
 public String getFirstName()
 {  return firstName;  }
     ... ETC ...  REMAINING GET/SET METHODS ELIMINATED FOR BREVITY.

Ошибки, которые я получаю, указывают на несоответствие между параметрами ... Faculty вызывает восемь параметров, но CollegeEmployee имеет только пять. Тем не менее, я думаю, что, расширив CollegeEmployee, который расширяет Person, я получу доступ ко всем восьми полям к моменту вызова этого класса. Как было указано, это не так. У меня есть только пять полей из Person. Итак, мой следующий очевидный вопрос: как я получу ssn, department and salary от CollegeEmployee до Faculty? Это часть, которую я скучаю. Я изучал Java Tutorials и экспериментировал пару часов, но все еще не могу понять, что мне нужно сделать для исправления. Нужно ли вызывать переменные People через CollegeEmployee, а затем создавать переменные CollegeEmployee в Faculty? Я действительно запутался в том, что делать, и отчаянно нуждаюсь в руководстве ...

Спасибо большое, я вернусь через несколько после того, как прочитаю раздел ключевых слов super () в Учебниках.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Вызов super() в конструкторе вызывает конструктор родительского класса.В этом случае конструктор родительского класса CollegeEmployee s принимает пять аргументов, но проходит восьмой проход, что неверно.

См. Супер-учебник по ключевым словам , раздел Конструкторы подкласса в частности.

2 голосов
/ 03 апреля 2012

В Faculty.java у вас есть: super (firstName, lastName, streetAddress, zipCode, phoneNumber, кафедра, ssn, зарплата);

Это физический вызов конструктора CollegeEmployee, который имеет только пять параметров.Это ошибка компиляции.

В классе могут быть переменные, которые не заданы в конструкторе.Вы можете иметь пустые конструкторы и устанавливать переменные в другом методе.

Поскольку существует структура наследования, вы можете устанавливать переменные родителя только через super ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...