内部类
1. 内部类与其所在的外层类之间存在着逻辑上的依赖关系——内部类的对象不能单独存在,它必须依赖一个其外层类的对
象;
2. 在内部类中可以直接访问其外层类中的成员、包括属性和方法,即使这些属性和方法是 private 的。
3. 内部类可以声明为抽象类,因此可以被其它的内部类继承。
也可以声明为 final 的。
4. 和外层类不同,内部类可以声明为 private 或 protected。
class A{
private int s;
public class B{
public void mb() {
s = 100;
System.out.println("在内部类B中s="+s);
}
}
public void ma() {
B i = new B();
i.mb();
}
}
public class TestInner {
public static void main(String[] args) {
A a = new A();
a.ma();//output:在内部类B中s=100
}
}
在外部使用其他类中的内部类
在外部使用其他类中的内部类虽然不提倡,但也是允许的。此时,应指明其完整层次,并显式建立对象间的依赖关系。
class AA {
private int s;
public class B {
public void mb() {
s=100;
System.out.println(s);
}
}
}
public class Test {
public static void main(String[] args) {
AA a = new AA();
// 创建一个依赖于 a 而存在的 b
AA.B b = a.new B();
b.mb();//output:100
}
}
内部类中出现变量命名冲突时,可以使用内部类对象的特殊属性“< 外层类名 >.this”来访问其所依赖外层类对象的成员
class A3 {
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(A3.this.s); // 外层类对象属性 s
}
}
}
public class Test3 {
public static void main(String args[]) {
A3 a = new A3();
A3.B b = a.new B();
b.mb(333);//output:333\n222\n111\n
}
}