0

私は 4 つの協調するクラスを書きました。そのうちの 1 つは と呼ばれWorkStationます。

WorkStationこれがクラスのコードです。

import java.util.ArrayList;

public class WorkStation {

    /**
     * the pc
     */
    private Hardware pc;

    /**
     * list of available software
     */
    private ArrayList<Software> applications;

    /**
     * whether a web camera is attached or not
     */
    private boolean hasWebCamera;

    /**
     * id number of the Workstation
     */
    private final int idNumber;

    /*
     * Constructor with three parameters
     */
    public WorkStation(Hardware pc, boolean hasWebCamera, int idNumber) {

        this.pc = pc;
        this.hasWebCamera = hasWebCamera;
        this.idNumber = idNumber;
        applications = new ArrayList<Software>();

    }

    //------------------------------- Getter Methods ------------------------------
    /*
     * Gets the pc
     * 
     * @return The pc
     */
    public Hardware getPc() {
        return pc;
    }

    /*
     * Gets whether there is a web camera
     * 
     * @return True or false
     */
    public boolean isHasWebCamera() {
        return hasWebCamera;
    }

    /*
     * Gets the id number
     * 
     * @return The id number
     */
    public double getIdNumber() {
        return idNumber;
    }

    //--------------------------- Setter Methods -------------------------
    /*
     * Sets the pc
     * 
     * @param The pc
     */
    public void setPc(Hardware pc) {
        this.pc = pc;
    }

    /*
     * Sets whether there is a web camera
     * 
     * @param True or false
     */
    public void setHasWebCamera(boolean hasWebCamera) {
        this.hasWebCamera = hasWebCamera;
    }

    // --------------------- ArrayList Methods --------------------
    /*
     * Method to add a piece of software to the list
     */
    public void addSoftware(Software software) {
        applications.add(software);
    }

    /*
     * Method to remove a piece of software from the list
     */
    public void removeSoftware(Software software) {
        applications.remove(software);
    }

    /*
     * Method to remove all software from the list
     */
    public void clearApplications(Software software) {
        applications.clear();
    }

    /*
     * toString Method
     * 
     * @param aPc
     * 
     * @param aHasWebCamera
     * 
     * @param aIdNumber
     */
    public String toString() {
        return "Pc is " + getPc() + ", web camera is " + isHasWebCamera() + 
                " and ID number is " + getIdNumber();
    }

}//end of class

次に、協調するクラスを 1 つのテスト クラスでテストする必要があります。

Testこれまでのクラスのコードは次のとおりです。

public class Test{

    public static void main(String[] args){

    //Software
    Software s1 = new Software();
    s1.setName("Database");
    s1.setManufacturer("Microsoft");
        System.out.println(s1.toString());

    Software s2 = new Software("Drawing Package", "Sony");
    System.out.println(s2.toString());

    //Hardware
    Hardware h1 = new Hardware();
    h1.setManufacturer("Dell");
    h1.setProcessorType("Dual Core");
    h1.setHardDiskCapacity(1);
        System.out.println(h1.toString());

    Hardware h2 = new Hardware("Oracle", "Intel Core i7", 3);
        System.out.println(h2.toString());

    //WorkStation
    WorkStation w1 = new WorkStation();

私が抱えている問題は、テストクラスにあるものをコンパイルしようとすると、次のようなエラーメッセージが表示されることです。

cannot find symbol
symbol  : constructor WorkStation() location: class WorkStation: 
WorkStation w1 = new WorkStation();

これがなぜなのか、私には本当に理解できません。WorkStationクラスが完全にコンパイルされ、クラス内の他のクラスがコンパイルされたので、クラスがクラスでコンパイルされないTest理由を誰でも見ることができますか?WorkStationTest

4

3 に答える 3

2

その理由は次の行です。

WorkStation w1 = new WorkStation();

WorkStationクラスにパラメーターなしのコンストラクターが含まれていません。また、クラスにパラメトリック コンストラクターが既に定義されている場合、Java コンパイラーはそのクラスにデフォルトのコンストラクターを挿入しません。WorkStationしたがって、クラス内でパラメーターなしのコンストラクターを定義する必要があります。

于 2013-07-29T20:32:32.453 に答える
0

コンストラクターを定義しました:

public WorkStation(Hardware pc, boolean hasWebCamera, int idNumber){

        this.pc = pc;
        this.hasWebCamera = hasWebCamera;
        this.idNumber = idNumber;
        applications = new ArrayList<Software>();

}

ただし、次のように呼び出します。

WorkStation w1 = new WorkStation();

コンストラクターを定義する必要があります。

public WorkStation(){...}

デフォルトのコンストラクターは、別のコンストラクターを定義しない限り、自動的に生成される引数なしのコンストラクターです。初期化されていないフィールドをデフォルト値に初期化します。コンストラクターを定義したため、デフォルトのコンストラクターは生成されませんでした...

于 2013-07-29T20:32:34.300 に答える
0

ワークステーション クラスにはコンストラクターが 1 つしかなく、3 つの引数を取ります。存在しないパラメーターなしのコンストラクターを使用しようとしています。

コンストラクターを定義しない場合、パラメーターなしのコンストラクターが追加されますが、少なくとも 1 つのコンストラクターを定義するとすぐに、既定のパラメーターなしのコンストラクターは作成されず、必要な場合は定義する必要があります。

于 2013-07-29T20:33:33.787 に答える