2015-10-08 27 views
1

我有几类,包括我的超类:铸造类调用一个方法在子类中

Person.java

public class Person { 
    private Name personName; 
    private Person spouse; 
    Person(String fullName) { 
     personName = new Name(fullName); 
     System.out.println(personName.toString()); 
    } 
    Person(Person copyPerson) { 
     this.personName = copyPerson.personName; 
    } 

    public void setSpouse(Person spouse) { 
     this.spouse = new Person(spouse); 
    } 

    public String toString() { 
     if(spouse != null) { 
      return ("Name is " + getPersonName().toString() + "Married to " + spouse.getPersonName().toString()); 
     } 
     else { 
      return ("Name is " + getPersonName().toString()); 

     } 
    } 
    public float getFamilyIncome() { 
     return ((NewWorker)personName).salary; 
    } 

    public Name getPersonName() { 
     return personName; 
    } 

    public void setPersonName(Name personName) { 
     this.personName = personName; 
    } 
} 

我这个类的子类 NewWorker.java

public class NewWorker extends Person { 
    private static int howManyWorkers = 0; 
    private int workerNumber; 
    private MyDate dateJoiningCompany; 
    private float Salary = 0.0f; 
    private NewWorker Supervisor; 

    public NewWorker(String name, String date, double salary) { 
     super(name); 
     ++howManyWorkers; //Add one to total workers 
     dateJoiningCompany = new MyDate(date); 
     Salary = (float)salary; 
     workerNumber = howManyWorkers; 
    } 
    public NewWorker(String name, String date) { 
     super(name); 
     ++howManyWorkers; 
     dateJoiningCompany = new MyDate(date); 
     workerNumber = howManyWorkers; 
    } 
    public void setSalary(double salary) { 
     Salary = (float)salary; 
    } 
    public void setSupervisor(NewWorker supervisor) { 
     if(supervisor != null) { 
      Supervisor.setPersonName(new Name(supervisor.getSupervisorName())); 
     } 
     else { 
      System.out.println("The person you are trying to assign a Supervisor to has no supervisor"); 
     } 
    } 
    public static int getHowManyWorkers() { 
     return howManyWorkers; 
    } 
    public Name getSupervisorName() { 
     return Supervisor.getPersonName(); 
    } 
    public float getSalary(NewWorker person) { 
     return person.Salary; 
    } 
    public String toString() { 
      return ("Worker Number = " + workerNumber + " " + "Worker Name = " + super.toString() + " " + "Date Joined Company = " + dateJoiningCompany.toString() 
        + " " + "Salary = " + Salary); 
    } 
} 

而且我的姓名:

import java.util.StringTokenizer; 

public class Name { 
    private String firstName; 
    private String middleName; 
    private String lastName; 
    public Name(String name) { 
     StringTokenizer tokens; 
     tokens = new StringTokenizer(name," "); 
     int numTokens = tokens.countTokens(); 
     if(numTokens == 2) { 
      firstName = tokens.nextToken(); 
      middleName = null; 
      lastName = tokens.nextToken(); 
     } 
     else if(numTokens == 3) { 
      firstName = tokens.nextToken(); 
      middleName = tokens.nextToken(); 
      lastName = tokens.nextToken(); 
     } 
     else { 
      System.out.println("That was not a valid input"); 
      while(tokens.hasMoreElements()) { 
       System.out.println(tokens.nextToken()); 
      } 
      return; 
     } 
    } 
    public Name(Name name) { 
     if(name != null) { 
      firstName = name.firstName; 
      middleName = name.middleName; 
      lastName = name.lastName; 
     } 
    } 
    public void setName(String first, String middle, String last) { 
     firstName = first; 
     middleName = middle; 
     lastName = last; 
    } 
    public String toString() { 
     if(middleName != null) { 
      return (lastName + ", " + firstName + " " + middleName.charAt(0) + "."); 
     } 
     else { 
      return (lastName + ", " + firstName); 
     } 
    } 
} 

现在在超Person.java行的地方说我出现目前的问题:

public float getFamilyIncome() { 
    return ((NewWorker)personName).salary; 
} 

现在什么即时试图做的就是一个家庭的工资的人(工资称为配偶+ salaryr )目前,我忽略了配偶的一部分,并试图获得被调用者的工资。

public class Lab4Tester { 
    public static void main(String[] args){ 
     NewWorker w1, w2, w3, w4, w5; 
     Person p1, p2; 
     MyDate d1, d2, d3, d4; 

     p1 = new Person("Edward Teller"); 
     p2 = new Person("Liz Powell"); 

     w1 = new NewWorker ("Robert William Hunter", "23/10/2005", 35000.00); 
     w2 = new NewWorker ("John Smith", "15/11/2005", 25000.00); 
     w3 = new NewWorker ("Mary Jane Hull", "06/09/2007"); 
     w4 = new NewWorker ("Richard Mark Harry", "01/08/2004"); 
     w5 = new NewWorker ("Jessica Chowhan", "21/01/2006", 30000.00); 

     w3.setSalary(40000.00); 
     w4.setSalary(53000.00); 
     w4.setSalary(55000.00); 
     w4.setSalary(58000.00); 

     w2.setSupervisor(w3); 
     w3.setSupervisor(w4); 
     w1.setSupervisor(w3); 
     w5.setSupervisor(w4); 

     w3.setSpouse(p1); 
     p1.setSpouse(w3); 

     w2.setSpouse(p2); 
     p2.setSpouse(w2); 

     w1.setSpouse(w5); 
     w5.setSpouse(w1); 


     System.out.println("Supervisor of w1 is " + w1.getSupervisorName()); 
     System.out.println("w2 is " + w2); 
     System.out.println("w3 is " + w3); 
     System.out.println("w4 is " + w4); 
     System.out.println("w5 is " + w5); 
     System.out.println("Total family income of Robert " 
          + w1.getFamilyIncome()); 
     System.out.println("Total family income of Edward " 
          + p1.getFamilyIncome()); 
    } 

} 

所以我只需要弄清楚如何设置工资如果对象是NewWorker类的:我通过测试我的计划。我怎样才能做到这一点?我知道我需要以某种方式施放它,但我不知道如何。

感谢所有帮助

+1

目前还不清楚你在问什么。是“如果对象是NewWorker类的话,我如何设置薪水”也许是一个错字?如果对象是NewWorker类,那么可以简单地调用setSalary方法,就像在示例中做了4次一样。 – rmlan

+0

我假设你在温莎大学的Java编程课上。 [看几天前我的帖子](http://stackoverflow.com/questions/32926289/superclass-cannot-be-cast-to-subclass-in-java),我能够解决你的确切问题。 –

+0

@ishyfishy你好,我很感谢 – JackVanier

回答

0

为什么是“getFamilyIncome”在“人”的方法,如果是仅适用于“NewWorker的?你应该将这个方法移到你的'NewWorker'类中。