ホームページ  >  記事  >  Java  >  Java内部クラスの詳細説明

Java内部クラスの詳細説明

王林
王林転載
2020-04-23 16:25:402409ブラウズ

Java内部クラスの詳細説明

通常の内部クラス

通常の内部クラスをマスターするための主なポイントは 2 つあります。

親クラスの参照を保持します。したがって、親クラスの任意のアクセス権で変数とメソッドにアクセスできます

親クラスの外に内部クラスを作成する方法

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        //外部类外部创建内部类
        Outer.Inner inner = outer.new Inner();
        inner.method();
    }
}
class Outer{
    private String value = "OuterValue";
    class Inner{
        public void method(){
            //持有父类引用,可以访问父类private变量value
            System.out.println(value);
        }
        //利用.this关键字,可以返回父类对象引用
        public Outer outerObject(){
            return Outer.this;
        }
    }
}

(推奨チュートリアル: java エントリ プログラム )

メソッド内部クラス

メソッドで直接定義された内部クラス

メソッドと同じ権限を享受し、他のメソッドおよびメンバー変数にアクセスします外側のクラスの。

このメソッドのパラメータにアクセスできます。1.8 以降では、パラメータを Final に設定する必要はありません。

メソッドのローカル変数と同じ権限を持ち、その前に定義されているローカル変数

メソッド内部クラスはメソッド スコープ内でのみアクセスできます

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        outer.outerMethod("param");
    }
}
class Outer{
    public void outerMethod(String value){
        class Inner {
            public void innerMethod(){
                //可以访问方法参数
                //1.8以后,内部类访问的方法参数不必设置为final
                System.out.println(value);
            }
        }
        new Inner().innerMethod();
    }
}

匿名内部クラス

匿名内部クラスは実際にはこれは重要なポイントであり、私たちが頻繁に使用する知識ポイントでもあります。

たとえば、新しいスレッドを作成する場合

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new Runnable(){
            @Override
            public void run(){
                System.out.println("thread a is running;");
            }
        });
        a.start();
    }
}

上記のコードは、Runnable インターフェイスを実装する匿名クラス オブジェクトを作成することを意味しており、これは次のコードと同等です。 、私たちはよく 2 番目のものを使用します

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new RunnableImp());
        a.start();
    }
    static class RunnableImp implements Runnable{
        @Override
        public void run(){
            System.out.println("thread a is running;");
        }
    }
}

静的内部クラス

次の 2 つの点を覚えておいてください

静的内部クラス オブジェクトを作成するには、次のようにします。外部クラスのオブジェクトは必要ありません (通常の内部クラスは を必要とします)

静的内部クラスから非静的外部クラス メソッドまたはメンバー変数にアクセスできません

public class Main{
    Outer.Inner inner = new Outer.Inner();
}

class Outer{
    private String ordValue;
    private static String staValue;
    static class Inner{
        {
            System.out.println(staValue);

            //这句编译通不过
            //System.out.println(ordValue);
        }
    }
}

関連ビデオ チュートリアルの推奨事項: Java ビデオ

#

以上がJava内部クラスの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。