3

私は最近プログラミングを始めたので、コーディングのこの分野で少し立ち往生していました。

ネストされたクラスという名前のプログラミング レッスンがあります。しかし、私がそれを使いたいとき、それは実際には宿題が望んでいることをしません. これが私が達成する必要があるものの例です:

public class Zoo {
    ...
    public static class monkey {
        ...
    }
}

そして主に

Zoo zoo1 = new Zoo();
...
zoo1.monkey.setage(int);
...

しかし、ここで問題があります。zoo1 から monkey を呼び出したいときはいつでも、デバッガーはそれが不可能であると言います (monkey のインスタンスを作成せずにこれを実行したいことを思い出してください)。

前もって感謝します

更新:それがちょっとした言語の制限であるかどうか疑問に思っているだけですが、オラクル自体がsystem.out.printfでどのように簡単にそれを行うことができますか?

4

3 に答える 3

2

Zooのインスタンスを介してサルのクラスにアクセスすることはできません。実際にアクセスする意味はありません。メインからサルの静的メソッドにアクセスしたい場合は、以下の例を使用できます

public class Zoo {

    public static void main(String[] args) {
        // Example 1
        monkey.setage(3);
        // Example 2
        Zoo.monkey.setage(3);
    }

    public static class monkey {
        private static int age;

        public static void setage(int age) {
            monkey.age = age;
        }
    }
}

しかし、あなたは実際に何を達成しようとしていますか?

于 2013-02-28T10:50:24.760 に答える
1

編集:「(サルのインスタンスを作成せずにこれをやりたいことを思い出してください)」というメモを見ませんでした

質問する前に、検索すると時間を節約できる場合があります。このアドレスからの直接引用: http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

内部クラス

インスタンス メソッドや変数と同様に、内部クラスは、それを囲むクラスのインスタンスに関連付けられ、そのオブジェクトのメソッドやフィールドに直接アクセスできます。また、内部クラスはインスタンスに関連付けられているため、静的メンバー自体を定義することはできません。

内部クラスのインスタンスであるオブジェクトは、外部クラスのインスタンス内に存在します。次のクラスを検討してください。

クラス OuterClass { ... クラス InnerClass { ... } }

InnerClass のインスタンスは、OuterClass のインスタンス内にのみ存在でき、その外側のインスタンスのメソッドとフィールドに直接アクセスできます。次の図は、この考え方を示しています。

InnerClass のインスタンスが OuterClass のインスタンス内に存在する

内部クラスをインスタンス化するには、まず外部クラスをインスタンス化する必要があります。次に、次の構文を使用して、外側のオブジェクト内に内側のオブジェクトを作成します。

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

さらに、ローカル クラスと匿名クラス (匿名内部クラスとも呼ばれます) という 2 つの特別な種類の内部クラスがあります。これらの両方については、次のセクションで簡単に説明します。

于 2013-02-28T10:43:54.387 に答える
1

monkey私には静的に見えます。publicただし、の代わりにする必要がPublicあります。

setage()それは静的メソッドではないと思います。その場合、年齢がサルのプロパティである場合、それを静的に呼び出すのは意味がありません。誰の年齢を設定しますか?

ただし、問題は、外部クラス型の変数を介して静的内部クラスにアクセスできないように見えることです。

Zoo.monkeyしたがって、の代わりにする必要がありzoo1.monkeyます。

スコープやネーミングだけを制御したい場合は、packagesを使用できます。

たとえば、次のようにすることができます。

package com.example.application.feature;

public class MyClass {
    public void f() {
        System.out.println("Hello");
    }
}

というソースファイルにcom/example/application/feature/MyClass.java.

于 2013-02-28T10:44:47.493 に答える