0

(個人、学生、従業員、教職員)クラスを作成しました。人は学生と従業員をサブクラス化する必要があります。従業員には、教員とスタッフの2つのサブクラスがあります。私はすべてのコーディングを行いましたが、ドライバークラスの TestPersonプログラムを除いて、正常に動作しています。コンパイルエラーが発生します。

注:Person、Student、Employee、Faculty、Staffを作成し、それらのtoStringメソッドを呼び出すテストプログラム。

ドライバクラスTestPerson.javaのエラーは以下のとおりです。-

 
エラー:クラスStudentのコンストラクタStudentは、指定された型に適用できません。
エラー:Employee(String、String、String、String)に適したコンストラクターが見つかりません
エラー:クラスFacultyのコンストラクターFacultyは、指定されたタイプに適用できません。
エラー:Staff(String、String、String、String)に適したコンストラクターが見つかりません "

**ドライバークラスのコードを提供しているだけです。他のクラスの他のコーディングが必要な場合は、コメントに記載してください。すぐに投稿します。

以下の私のコーディングを参照してください:-

public class TestPerson {

    public static void main(String[] args) {
        Person person = new Person("John Doe", "123 Somewhere", "415-555-1212", "johndoe@somewhere.com");
        Person student = new Student("Mary Jane", "555 School Street", "650-555-1212", "mj@abc.com", "junior");
        Person employee = new Employee("Tom Jones", "777 B Street", "40-88-889-999", "tj@xyz.com");
        Person faculty = new Faculty("Jill Johnson", "999 Park Ave", "92-52-22-3-333", "jj@abcxyz.com");
        Person staff = new Staff("Jack Box", "21 Jump Street", "707-21-2112", "jib@jack.com");

        System.out.println(person.toString() + "\n");
        System.out.println(student.toString() + "\n");
        System.out.println(employee.toString() + "\n");
        System.out.println(faculty.toString() + "\n");
        System.out.println(staff.toString() + "\n");
        }
}

//個人クラス

public class Person {

    private String name;
    private String address;
    private String phone_number;
    private String email_address;

    public Person() {
    }

    public Person(String newName, String newAddress, String newPhone_number, String newEmail){
        name = newName;
        address = newAddress;
        phone_number = newPhone_number;
        email_address = newEmail;
    }

    public void setName(String newName){
        name = newName;
    }

    public String getName(){
        return name;
    }

    public void setAddress(String newAddress){
        address = newAddress;
    }

    public String getAddress(){
        return address;
    }

    public void setPhone(String newPhone_number){
        phone_number = newPhone_number;
    }

    public String getPhone(){
        return phone_number;
    }

    public void setEmail(String newEmail){
        email_address = newEmail;
    }

    public String getEmail(){
        return email_address;
    }

    public String toString(){
        return "Name :"+getName();
    }

}

//学生クラス

public class Student extends Person {

    public final String class_status;

    public Student(String name, String address, int phone, String email, String classStatus) {
    super(name, address, phone, email);
    class_status = classStatus;
    }
    public String toString(){
        return "Student Status: " + super.getName();
    }

}

//従業員クラス

import java.util.Date;
public class Employee extends Person{

    private String office;
    private double salary;
    private Date hire;

    public Employee() {
    }

    public Employee(String name, String address, int phone, String email){
        super(name, address, phone, email);
    }

    public Employee(String office, double salary, Date hire){
        this.office = office;
        this.salary = salary;
        this.hire = hire;
    }

    public void setOffice(String office){
        this.office = office;
    }

    public String getOffice(){
        return this.office;
    }

    public void setSalary(double salary){
        this.salary = salary;
    }

    public double getSalary(){
        return this.salary;
    }

    public void setHire(Date hire){
        this.hire = hire;
    }

    public Date getHire(){
        return this.hire;
    }

    public String toString(){
        return "Office " + super.getName();
    }
}

//ファカルティクラス

public class Faculty extends Employee {
    private String officeHours;
    private int rank;

    public Faculty(String name, String address, int phone, String email) {
    super(name, address, phone, email);
    }

    public String toString(){
        return "Office " + super.getOffice();
    }
}

//スタッフクラス

public class Staff extends Employee {
    private String title;

    public Staff(String name, String address, int phone, String email) {
    super(name, address, phone, email);
    }

    public Staff(String title){
        this.title = title;
    }

    public void setTitle(String title){
        this.title = title;
    }
    public String getTitle(){
        return this.title;
    }

    public String toString(){
        return "Title :" + super.getName();
    }
}
4

4 に答える 4

4

これらのエラーが発生する理由は、コンストラクターが存在しないためです。

エラー:クラスStudentのコンストラクタStudentは、指定された型に適用できません。エラー:Employee(String、String、String、String)に適したコンストラクターが見つかりません

つまり、次のようになるまで、コードをコンパイルすることはできません。

Student(String name, String addr, String phone, String email) {
    ....
}

コンストラクターでプロパティを設定したとすると、toStringは次のようになります。

public String toString() {
    return this.name + "\n" + this.addr + "\n" + this.phone + "\n" + this.email;

}

アップデート

あなたの問題は、Studentがこのコンストラクターしか持っていないことです:

public Student(String name, String address, int phone, String email, String classStatus)

Studentには、パラメーターとして4つの文字列のみを受け取るコンストラクターが必要です。または、指定した5つのパラメーターをすべてに使用させることもできます。

于 2012-09-24T14:00:57.170 に答える
2

質問自体とは関係ないかもしれませんが、次のようにデザインを洗練させることができると思います。

  • ロールの名前で抽象クラスRoleを定義する
  • 継承する役割に関係なく、クラスStudent、Employee、Staffを定義します
  • すべての個人タイプ、名前などに共通のプロパティを持ち、内部にRoleタイプのプロパティを持つクラスPersonを定義します

次に、PersonおよびすべてのRole実装でtoStringを定義します

このようにして、役割とは別に個人を拡張または変更できるようになり、設計がより柔軟になります。

于 2012-09-24T14:04:32.350 に答える
2

Personのコンストラクターは、3番目の引数としてStringを必要としますがint phone、サブクラスのスーパーコンストラクターに渡そうとしています。タイプが間違っているため、機能しません。

ちなみに、電話番号は常に整数ではなく文字列で表す必要があります。

  1. 電話番号を足したり引いたりしても意味がありません。
  2. 整数では、一部の国で市外局番に使用される先行ゼロは使用できません。
  3. 整数は2147483648より大きくすることはできません。非常に長い電話番号を保存しようとすると、この一見恣意的な制限により、非常に予期しないバグが発生します。
于 2012-09-24T14:04:40.083 に答える
1

まず、すべてのクラスで電話番号データ型を整数として設定します。

主な機能は次のとおりです。

public class TestPerson {
    public static void main(String[] args) {
        Person person = new Person("John Doe", "123 Somewhere", "415-555-1212",
                                   "johndoe@somewhere.com");
        Person student = new Student("Mary Jane", "555 School Street", 
                                     650-555-1212, "mj@abc.com", "junior");
        Person employee = new Employee("Tom Jones", "777 B Street", 
                                       40-88-889-999,  "tj@xyz.com");
        Person faculty = new Faculty("Jill Johnson", "999 Park Ave",
                                     92-52-22-3-333, "jj@abcxyz.com");
        Person staff = new Staff("Jack Box", "21 Jump Street", 707-21-2112, 
                                 "jib@jack.com");

        System.out.println(person.toString() + "\n");
        System.out.println(student.toString() + "\n");
        System.out.println(employee.toString() + "\n");
        System.out.println(faculty.toString() + "\n");
        System.out.println(staff.toString() + "\n");
    }
}
于 2013-11-25T19:06:44.137 に答える