「ネストクラス」とは?
状態:-
閲覧数:1,298
投稿日:2013-04-28
更新日:2013-04-29
・あるクラス定義の中で定義されているクラス
・「入れ子クラス」も同義
1.内部クラス
・「親クラスのクラス定義」の中で定義され、staticでないもの(「static修飾子を伴うメンバ型」を除いたもの)
・上記の内「親クラスのメソッド定義」の中で定義されているもの(無名クラスであることが多い)を、ローカルクラスと呼ぶ
2.static なメンバクラス
・ネストしたクラスのうち、 static を付与して宣言されたクラスは全て static なメンバクラスとなる
・class B … 「ネストクラス」「内部クラス」
・class C … 「ネストクラス」「内部クラス」「ローカルクラス」
・class D … 「ネストクラス」「static なメンバクラス」
※「class C」は、「ネストクラス」であり、「内部クラス」であり、「ローカルクラス」でもある、という意味
・「入れ子クラス」も同義
「ネストクラス」に分類されるもの
1.内部クラス
・「親クラスのクラス定義」の中で定義され、staticでないもの(「static修飾子を伴うメンバ型」を除いたもの)
・上記の内「親クラスのメソッド定義」の中で定義されているもの(無名クラスであることが多い)を、ローカルクラスと呼ぶ
2.static なメンバクラス
・ネストしたクラスのうち、 static を付与して宣言されたクラスは全て static なメンバクラスとなる
コード例
class A{
class B{ // 内部クラス
}
public static void main( String args[ ] ){
class C{ // ローカルクラス
}
static class D{ // static なメンバクラス
}
}
・class B … 「ネストクラス」「内部クラス」
・class C … 「ネストクラス」「内部クラス」「ローカルクラス」
・class D … 「ネストクラス」「static なメンバクラス」
※「class C」は、「ネストクラス」であり、「内部クラス」であり、「ローカルクラス」でもある、という意味
二重ネストクラス
二重ネストクラスとは?
・ネストクラス内のネストクラス
コード例
class A{
class B{ // ネストクラス
class C{ // 二重ネストクラス
}
}
}
・二重ネスト出来るか出来ないか、と問われれば、可能
・だからと言って、「二重ネストクラス」利用を正当化する理由は一つも思い浮かばない
・要するに、全く推奨されていない書き方