これまでの研究により、クラスにはメンバー変数とメソッドという 2 つの重要なメンバーが存在する可能性があることがわかっています。実際、クラスには内部クラスという 1 種類のメンバーもあります。クラスが別のクラスを定義する場合、そのようなクラスを内部クラスと呼び、内部クラスを含むクラスを内部クラスの外部クラスと呼びます。
1) 内部クラスの外部クラスのメンバー変数は内部クラスでも有効であり、内部クラスのメソッドは外部クラスのメソッドを呼び出すこともできます。
2) 内部クラスのクラス本体ではクラス変数およびクラスメソッドを宣言できません。外部クラスのクラス本体では、内部クラスを使用してオブジェクトを外部クラスのメンバーとして宣言できます。
3) 内部クラスは、その外部のネストされたクラスによってのみ使用できます。他のクラスは、特定のクラスの内部クラスを使用してオブジェクトを宣言できません。
内部クラスの外部クラスのメンバ変数は内部クラスでも有効であるため、内部クラスと外部クラス間の相互作用は非常に便利です。
例えば:
classRedCowForm{staticStringformName;RedCowcow;//内部クラス宣言オブジェクト RedCowForm(){}RedCowForm(Strings){cow=newRedCow(88,66,2000);formName=s;}publicvoidshowCowMess(){cow.speak();}classRedCow {//内部クラス宣言 StringcowName=calf;intheight,weight,price;RedCow(inth,intw,intp){height=h;weight=w;price=p;}voidspeak(){System.out.println( 私は+cowName+、身長+身長+cm、体重+体重+kg、+formNameに住んでいます);}}}publicclassMain{publicstaticvoidmain(String[]args){RedCowFormform=newRedCowForm(dotcpp farm);form.showCowMess(); フォーム。牛.speak();}}
実行結果は次のとおりです。
私は子牛で、身長は 88 センチ、体重は 66 キロです。
注意: Javaコンパイラが生成する内部クラスのバイトコードファイル名は、通常のクラス名とは異なります。内部クラスに対応するバイトコードファイルの名前形式は、「埋め込みクラス名$内部クラス名」となります。例: 上記の例の内部クラスのバイトコード ファイルの名前は RedCowForm$RedCow.class である必要があります。
内部クラスは静的内部クラスとして変更できます。静的内部クラスは、埋め込みクラスの静的データ型です。ただし、静的内部クラスは、埋め込みクラスのインスタンス メンバー変数で動作できません。
皆さんもコンピューターで実験して、このセクションの内容を消化して吸収してください。