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
类的:我通过测试我的计划。我怎样才能做到这一点?我知道我需要以某种方式施放它,但我不知道如何。
感谢所有帮助
目前还不清楚你在问什么。是“如果对象是NewWorker类的话,我如何设置薪水”也许是一个错字?如果对象是NewWorker类,那么可以简单地调用setSalary方法,就像在示例中做了4次一样。 – rmlan
我假设你在温莎大学的Java编程课上。 [看几天前我的帖子](http://stackoverflow.com/questions/32926289/superclass-cannot-be-cast-to-subclass-in-java),我能够解决你的确切问题。 –
@ishyfishy你好,我很感谢 – JackVanier