Java 抽象和继承类

Java 抽象和继承类,java,inheritance,abstract-class,Java,Inheritance,Abstract Class,[电流输出][1] 需要知道为什么salary is class正确打印输出120000/12,但executive and hourly class打印的值与从员工文本文件[staff][2]读取的值完全相同。问题UML看起来像这样[问题UML][3] 想知道我是否正确使用超级关键字,在每小时和行政类 ******************************************************************************** //Driver class

[电流输出][1] 需要知道为什么salary is class正确打印输出120000/12,但executive and hourly class打印的值与从员工文本文件[staff][2]读取的值完全相同。问题UML看起来像这样[问题UML][3] 想知道我是否正确使用超级关键字,在每小时和行政类 ********************************************************************************

  //Driver class reads from staff.txt file    
        import java.io.File;
            import java.util.Scanner;
            public class StaffDemo{
              private static int size;
              private static String[][] employeeInfo;
              private static StaffMember[] staffMember;
              public static void main(String[] args){
                createStaff();
                //System.out.println(staffMember[3].getPaid());
                payAll();
              }

                  public static void createStaff(){
                    try{
                      File file = new File("staff.txt");
                      Scanner s = new Scanner(file);
                      size = Integer.parseInt(s.next());
                      //System.out.println(size);
                      employeeInfo = new String[size][5];
                      for(int i =0;i<size;i++){
                        for(int j=0;j<5;j++){
                          employeeInfo[i][j]=s.next();
                        }
                      }
                      int i=0;
                      staffMember = new StaffMember[size];
                      while(i<size){
                        if(employeeInfo[i][0].equals("Salaried")){
                          StaffMember staffSalaried = new Salaried(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));
                          staffSalaried.setEmployeeType(employeeInfo[i][0]);
                          staffMember[i] = staffSalaried;
                        }else if(employeeInfo[i][0].equals("Volunteer")){
                          StaffMember staffVolunteer = new Volunteer(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));        
                          staffVolunteer.setEmployeeType(employeeInfo[i][0]);
                          staffMember[i] = staffVolunteer;
                        }else if(employeeInfo[i][0].equals("Hourly")){
                          StaffMember staffHourly = new Volunteer(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));        
                          staffHourly.setEmployeeType(employeeInfo[i][0]);
                          staffMember[i] = staffHourly;
                        }else if(employeeInfo[i][0].equals("Executive")){
                          StaffMember staffExecutive = new Volunteer(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));        
                          staffExecutive.setEmployeeType(employeeInfo[i][0]);          
                          staffMember[i] = staffExecutive;        
                        }
                        i++;
                      }
                    }
                    catch(Exception e){
                      System.out.println("no file found");
                    }
                  }
                  public static void payAll(){
                    for(int k=0;k<size;k++)
                      System.out.println(staffMember[k]);
                  }
                }

    *******************************************************************************   


        //Executive class extends Salaried, suppose to add 0.1*payRate*bonus
            public class Executive extends Salaried{
              private double bonus=0;
              private double monthlySalary;
              public Executive(int idNumber, String firstName, String lastName, double payRate){
                super(idNumber,firstName,lastName, payRate);
                this.setMonthlyRate();
              }
              public void setMonthlyRate(){
                this.monthlySalary=super.payRate*0.1*bonus;
              }
              public double getMonthlyRate(){
                return this.monthlySalary;
              }
              public void addBonus(double bonus){
                this.bonus+=bonus;
              }
              public double getBonus(){
                return this.bonus;
              }
              @Override
              public double getPaid(){
                return this.getMonthlyRate();
              }
              @Override
              public String toString(){
                return super.toString()+this.getPaid();
              }
            }

    ********************************************************************************

        // volunteer class prints out payrate equals zero
        public class Volunteer extends StaffMember{
          private double payRate;
          public Volunteer(int idNumber, String firstName, String lastName, double payRate){
            super(idNumber,firstName,lastName);
            this.setMonthlyRate(payRate);
          }
          public void setMonthlyRate(double payRate){
            this.payRate=payRate;
          }
          public double getMonthlyRate(){
            return this.payRate;
          }
          @Override
          public double getPaid(){
            return getMonthlyRate();
          }
          public String toString(){
            return super.toString()+getPaid();
          }
        }

    ********************************************************************************
        //Hourly class extends StaffMember, it suppose to do payRate*80.00   
        public class Hourly extends StaffMember{
          private double payRate;
          public Hourly(int idNumber, String firstName, String lastName, double payRate){
            super(idNumber,firstName,lastName);
            this.setMonthlyRate(payRate);
          }
          public void setMonthlyRate(double payRate){
            this.payRate=payRate*80.00;
          }
          public double getMonthlyRate(){
            return this.payRate;
          }
          @Override
          public double getPaid(){
            return getMonthlyRate();
          }
          @Override
          public String toString(){
            return super.toString()+getMonthlyRate();
          }
        }

    ********************************************************************************
        //salaried
            public class Salaried extends StaffMember{
              public double payRate;
              public Salaried(int idNumber, String firstName, String lastName, double payRate){
                super(idNumber, firstName, lastName);
                this.setMonthlyRate(payRate);
              }
              public double getMonthlyRate(){
                return this.payRate;
              }
              public void setMonthlyRate(double payRate){
                this.payRate=payRate/12.00;
              }
              @Override
              public double getPaid(){
                return getMonthlyRate();
              }
              public String toString(){
                return super.toString()+getMonthlyRate();
              }
            }

    ********************************************************************************
        //StaffMember is abstract class
        public abstract class StaffMember{
          private String firstName;
          private String lastName;
          private int idNumber;
          private String employeeType;

          public StaffMember(int idNumber, String firstName, String lastName){
            this.idNumber=idNumber;
            this.firstName=firstName;
            this.lastName=lastName;
          }
          public int getIdNumber(){
            return this.idNumber;
          }
          public void setIdNumber(int idNumber){
            this.idNumber=idNumber;
          }
          public String getFirstName(){
            return this.firstName;
          }
          public void setFirstName(String firstName){
            this.firstName=firstName;
          } 
          public String getLastName(){
            return this.lastName;
          }
          public void setLastName(String lastName){
            this.lastName=lastName;
          } 
          public String getEmployeeType(){
            return this.employeeType;
          }
          public void setEmployeeType(String employeeType){
            this.employeeType=employeeType;
          }
          @Override
          public String toString(){
            return getFirstName()+" "+getLastName()+" ("+getEmployeeType()+"): $";
          }

          public abstract double getPaid();
          public abstract double getMonthlyRate();
          public abstract void setMonthlyRate(double i);
        }



  [1]: https://i.stack.imgur.com/rF54p.png
  [2]: https://i.stack.imgur.com/ohblq.png
  [3]: https://i.stack.imgur.com/UezAe.png
//驱动程序类读取staff.txt文件
导入java.io.File;
导入java.util.Scanner;
公开课员工演示{
私有静态整数大小;
私有静态字符串[][]employeeInfo;
私有静态StaffMember[]StaffMember;
公共静态void main(字符串[]args){
createStaff();
//System.out.println(staffMember[3].getPaid());
payAll();
}
公共静态void createStaff(){
试一试{
File File=新文件(“staff.txt”);
扫描仪s=新扫描仪(文件);
size=Integer.parseInt(s.next());
//系统输出打印项次(尺寸);
employeeInfo=新字符串[size][5];
对于(int i=0;i你确定“小时”和“执行”都是志愿者吗

else如果(employeeInfo[i][0].等于(“小时”)){

StaffMember staffHourly=新建志愿者(…)

else if(employeeInfo[i][0].equals(“高管”)){


StaffMember staffExecutive=new志愿者(…)

代码太多。提出一个最小但完整的重现问题的示例。该示例应仅包含有问题的代码、主方法、硬编码值、预期和实际输出。发布。。