内部クラスを実装する場合、その属性とメソッドのスコープ、つまりpublic、private、protectedを宣言する必要がありますか?
これは、内部クラスがどのように動作するかによって完全に異なります。デフォルトでは、内部クラスは非静的です。
public class Example1
{
int a;
public class Example2
{
int b;
void test () {}
}
}
非静的内部クラスは、外部クラスの非静的メソッド内でのみインスタンス化できます。これは、非静的内部クラスのすべてのインスタンスが外部クラスのインスタンスに関連付けられている必要があるためです。ある意味で、非静的内部クラスのすべてのインスタンスは、外部クラスのインスタンスの「内部」に存在します。外部クラスの単一のインスタンスが、内部クラスの複数のインスタンスに関連付けられている場合があります。
非静的内部クラスのインスタンスには外部クラスのインスタンスが関連付けられているため、内部クラスのメソッドは、外部クラスインスタンスの任意のメンバー(フィールドまたはメソッド)に直接アクセスできます。たとえば、上記で定義されたテストメソッドは、aとbの両方に直接アクセスできます
別のクラス内で定義されたクラスは、ネストされたクラスと呼ばれます。クラスの他のメンバーと同様に、ネストされたクラスは静的であるかどうかを宣言できます。非静的なネストされたクラスは、内部クラスと呼ばれます。内部クラスのインスタンスは、それを囲むクラスのインスタンス内にのみ存在でき、プライベートとして宣言されている場合でも、それを囲むクラスのメンバーにアクセスできます。次の表に、ネストされたクラスのタイプを示します。
ネストされたクラスのタイプタイプスコープ内部静的ネストされたクラスメンバーいいえ内部[非静的]クラスメンバーはいローカルクラスローカルはい匿名クラスそれが定義されているポイントのみはい