>> Java入門トップに戻る
Javaの内部クラスについて説明します。
内部クラスとはクラスの中にクラスを定義することです。
イメージとしては以下の様な感じです。
上記のように定義した場合「内部クラスTest2のメソッドから、クラスTest1のメソッドやフィールドにアクセスすることが可能」になります。
この時、アクセス修飾子は関係なくアクセス出来ます。
何故かというと、「内部クラスTest2はクラスTest1の一部」なので、クラスTest1に定義されたメソッドやフィールドは自分のクラスの物のように扱えるのです。
では実際にコードを見てみましょう。
内部クラスTest2のechoValueメソッドでは、Test1のフィールド「value」にアクセスしたり、Test1のechoHelloメソッドにアクセスしています。
そのメソッドとフィールドのアクセス修飾子は両方共「private」です。
内部クラスだとprivateでもアクセス出来てしまうのです。
このコードを実行すると、
クラスTest1のコンストラクタで内部クラスTest2のインスタンスを生成し、内部クラスTest2のechoValueメソッドを呼び出されるので、コンソールに「5」と「Hello」という文字列が出力されます。
以上が内部クラスの説明です。
使い所としては、別のクラスに自分のクラスのフィールドやメソッドを共有させたい時などに使うと良いと思います。
>> 【無名クラス(匿名クラス)】に進む
>> Java入門トップに戻る
内部クラス
内部クラスとはクラスの中にクラスを定義することです。
イメージとしては以下の様な感じです。
class Test1{ class Test2{ } }そのままクラスの中にクラスを定義するだけです。
上記のように定義した場合「内部クラスTest2のメソッドから、クラスTest1のメソッドやフィールドにアクセスすることが可能」になります。
この時、アクセス修飾子は関係なくアクセス出来ます。
何故かというと、「内部クラスTest2はクラスTest1の一部」なので、クラスTest1に定義されたメソッドやフィールドは自分のクラスの物のように扱えるのです。
では実際にコードを見てみましょう。
package test4; public class SampleTest { public static void main(String[] args) { Test1 obj = new Test1(); } } class Test1{ private int value=5; private void echoHello(){ System.out.println("Hello"); } Test1(){ Test2 obj = new Test2(); obj.echoValue(); } class Test2{ public void echoValue(){ //Test1のフィールドも触れる。 System.out.println(value); //Test1のメソッドも触れる echoHello(); } } }クラスTest1内に内部クラスTest2を定義しています。
内部クラスTest2のechoValueメソッドでは、Test1のフィールド「value」にアクセスしたり、Test1のechoHelloメソッドにアクセスしています。
そのメソッドとフィールドのアクセス修飾子は両方共「private」です。
内部クラスだとprivateでもアクセス出来てしまうのです。
このコードを実行すると、
クラスTest1のコンストラクタで内部クラスTest2のインスタンスを生成し、内部クラスTest2のechoValueメソッドを呼び出されるので、コンソールに「5」と「Hello」という文字列が出力されます。
以上が内部クラスの説明です。
使い所としては、別のクラスに自分のクラスのフィールドやメソッドを共有させたい時などに使うと良いと思います。
>> 【無名クラス(匿名クラス)】に進む
>> Java入門トップに戻る