>> 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入門トップに戻る













