內部類別包含:
1.一般內部類別(regular inner class)
一個外部類別可以有很多內部類別,例如:
class out{
class in1{
}
class in2{
}
.
.
.
}
2.方法類別(method class)
方法內部類別其實就是在方法中宣告一個類別,例如:
public class innerclass{
public static void main(String[] args){
new innerclass().lool();
}
void lool(){
final int x=10;
int xx=20;
class in1{
System.out,println("nornal="+ xx) //會失敗
System.out,println("final="+ x)
}
}
.
}
特別注意,方法內部類別不可存取方法內非final的區域變數。
3.匿名類別(anonymous class)
匿名類別常用於在程式中只會使用一次的地方。
直接用{...}實作程式碼,例如:
public class innerclass{
public static void main(String[] args){
{
public void foo(){
System.out,println("")}
}
}
}
4.靜態內部類別(static inner class)
靜態內部類別在宣告時,加了static。被配置在記憶體Global中,而不是Heap內。
class outer{
private int d=4;
static private int a = 1;
static class InnerStatic{
private int b=2;
static private int c =3;
public void fooA(){ //fooA可存取InnerStatic的static成員與instance(non-static)與outer的static成員,但不能存取outer的instance(non-static)
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
public static void fooB(){ //僅可存取outer與InnerStatic所定義的static成員。
System.out.println(c);
System.out.println(a);
}
}
}
public class StaticClass{
public static void main(String[] args ){
outer.InnerStatic x= new Outer.InnerStatic();
x.fooB;
x.fooA;
}
}