内部类的应用:在描述一个A食物的时候,发现描述的A事物内部还有另外一个比较复杂的事物B的时候。
而且这个比较复杂的事物B还需要访问A事物的属性等数据,那么这个时候就可以使用内
部类描述B事物
成员内部类:
class outer{
int i;
class inner{
}
public void test(){
}
}
好处:内部类可以访问它的外部类所有成员,但内部类的成员只有在内部类的范围内是可知的
例:
人———>心脏
class 人{
血液
静脉
动脉
骨头
毛细血管
class 心脏{
血液
静脉
动脉
毛细血管
}
}
注意细节:
1:内部类和外部类有同名的成员变量时,在内部类中默认情况下访问内部类的成员变量
2:内部类访问外部类的同名变量时,通过“外部类.this.成员变量名”指定访问外部类的成员
3:如果修饰内部类为private,那么就不能在其他类中创建内部类的对象
4:private修饰的内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象
5:成员内部类一旦出现static的成员,那么该类也必须使用static修饰
错误写法:
class outer{
class inner{
static int i = 10;
System.out.prtintln("成员内部类的println方法:"+i);
}
}
正确写法:
class outer{
static class inner{
static int i = 10;
System.out.println("成员内部类的println方法:"+i);
}
}
在其他类中访问的静态内部类的静态成员:
class Test{
public static void main(String[] args){
System.out.println(outer.inner.i);
}
}
原因:静态数据不需要对象就能创建的,static修饰的对象是在class文件被加载到内存的时候就存在的
内部类是在外部类存在的时候才有内部类的存在(依赖于外部类对象存在的),如果不用static
修饰成员内部类,在里面却有static的成员,违背了静态数据的原则(不需要对象就能访问的);
访问方式:
1:在外部类提供一个方法创建内部类的对象进行访问
2:在其他类直接创建类的对象。格式:外部类.内部类 变量名 = new 外部类().new 内部类()
内部类定义在类里面叫成员内部类
局部内部类:
class outer{
int i;
public test(){
class inner{
}
}
}
内部类定义在外部类的方法里面叫局部内部类
匿名类: