[英]Casting a class to call a method in a subclass
我有幾節課,包括我的超級課:
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;
}
現在,我想做的是獲得家庭的薪水(被稱為薪金的人+配偶的薪水)。目前,我不理the配偶部分,而試圖獲取被叫人的薪水。 我通過以下方式測試程序:
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
類,我該如何設置薪水。 我怎樣才能做到這一點? 我知道我需要以某種方式進行投射,但不確定如何。
謝謝你的幫助
如果“ getFamilyIncome”僅對“ NewWorker”有效,為什么在“ Person”中使用該方法? 您應該將此方法移到“ NewWorker”類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.