- 在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类
- 内部类和外层封装它的类之间存在逻辑上的所属关系
- Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。Innerclass的名字不能与包含它的类名相同;
- nner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量;
class A {
privateint s;
public class B{
public void mb() {
s= 100;
System.out.println("在内部类B中s=" + s);
}
}
publicvoid ma() {
B i = new B();
i.mb();
}
}
public class Test {
publicstatic void main(String args[]){
A o = new A();
o.ma();
}
}
例2:
publicclass A{
private int s = 111;
public class B {
private int s = 222;
public void mb(int s) {
System.out.println(s); // 局部变量s
System.out.println(this.s); // 内部类对象的属性s
System.out.println(A.this.s); // 外层类对象属性s
}
}
public static void main(String args[]){
A a = new A();
A.B b = a.new B();
b.mb(333);
}
}
内部类特性:
- Innerclass可以声明为抽象类 ,因此可以被其它的内部类继承。也可以声明为final的。
- 和外层类不同,Innerclass可以声明为private或protected;
- Inner class 可以声明为static的,但此时就不能再使用外层封装类的非static的成员变量;
- 非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员;