簡體   English   中英

強制轉換類以調用子類中的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM