1

私はこれと本当に混乱しています!ClubMembershipの 2 つのクラスがあります。メンバーシップにはgetMonth()というメソッドがあり、クラブには「月」というパラメーターを取るJoinMonth()があります。ユーザーが月を入力し、その特定の月に参加したメンバーシップを返すようにします。

クラス Club から getMonth() メソッドを呼び出して、月の整数を比較できるようにしようとしています。しかし、メソッドを呼び出そうとすると、「非静的メソッド getMonth() は静的コンテキストから参照できません」というメッセージが表示されます。

基本的に、これは何ですか、どうすれば解決できますか?

前もって感謝します!

クラブ:

public class Club
{
    private ArrayList<Membership> members;
    private int month;

    /**
     * Constructor for objects of class Club
     */
    public Club()
    {
        // Initialise any fields here ...

    }

    /**
     * Add a new member to the club's list of members.
     * @param member The member object to be added.
     */
    public void join(Membership member)
    {
        members.add(member);
    }

    /**
     * @return The number of members (Membership objects) in
     *         the club.
     */
    public int numberOfMembers()
    {
        return members.size();
    }


        /**
    * Determine the number of members who joined in the given month
    * @param month The month we are interested in.
    * @return The number of members
    */
    public int joinedMonth(int month){

        Membership.getMonth();

    }



}

メンバーシップ:

public class Membership
{
    // The name of the member.
    private String name;
    // The month in which the membership was taken out.
    public int month;
    // The year in which the membership was taken out.
    private int year;

    /**
     * Constructor for objects of class Membership.
     * @param name The name of the member.
     * @param month The month in which they joined. (1 ... 12)
     * @param year The year in which they joined.
     */
    public Membership(String name, int month, int year)
        throws IllegalArgumentException
    {
        if(month < 1 || month > 12) {
            throw new IllegalArgumentException(
                "Month " + month + " out of range. Must be in the range 1 ... 12");
        }
        this.name = name;
        this.month = month;
        this.year = year;
    }

    /**
     * @return The member's name.
     */
    public String getName()
    {
        return name;
    }

    /**
     * @return The month in which the member joined.
     *         A value in the range 1 ... 12
     */
    public int getMonth()
    {
        return month;
    }

    /**
     * @return The year in which the member joined.
     */
    public int getYear()
    {
        return year;
    }

    /**
     * @return A string representation of this membership.
     */
    public String toString()
    {
        return "Name: " + name +
               " joined in month " +
               month + " of " + year;
    }
}
4

3 に答える 3

4

Membershipクラスです。メソッドが静的である場合にのみ許可されますが、メソッドの呼び出し。メソッドは静的ではないため、呼び出すにはクラスgetMonthのインスタンスが必要です。クラスにMembershipはすでにインスタンスのリストがあるので、そのうちの 1 つを選択して呼び出します。ClubgetMonth

于 2012-07-01T12:57:03.867 に答える
0

静的メソッドには、クラス名を使用してアクセスできます。上記のコードでは、クラス名Membership (Membership.getMonth())でgetMonth()メソッドにアクセスしようとしています。しかし、getMonth() の署名はpublic int getMonth() { ... } です。ここで、このメソッドには static キーワードは含まれていません。このため、「非静的メソッド getMonth() は静的コンテキストから参照できません」というメッセージが表示されます。

これを解決するには、public int getMonth() を public static int getMonth() に変更するか、Membership クラス用に既に作成したオブジェクトを使用する必要があります。

これが役に立てば幸いです。

于 2013-10-08T13:40:23.373 に答える
0

静的修飾子は、メソッド/フィールドをオブジェクト (インスタンス) ではなくクラスの一部にします。クラス名を参照(またはオブジェクト参照ですが、それは悪い習慣です)として使用して呼び出します。メソッド/フィールドが静的でない場合は、クラス オブジェクト (インスタンス) への参照を介して呼び出す必要があります。

于 2012-07-01T13:06:26.933 に答える