【发布时间】:2016-01-06 10:38:35
【问题描述】:
我有几门课,包括我的超级课:
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;
}
现在我想做的是获得一个家庭的薪水(被称为人的薪水+配偶的薪水)目前我忽略了配偶部分并试图获得被调用的人的薪水。我通过以下方式测试我的程序:
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 次一样。
-
我假设你在温莎大学的 Java 编程课上。 Take a look at my post from a few days ago,我能够解决您的确切问题。
-
@ishyfishy 是的,谢谢
标签: java inheritance subclass