------- android培训、java培训、期待与您交流! ----------
内部类:在一个类中又写了一个类 这个里面的类就叫内部类
访问方式:
1.内部类可以直接访问外部类的成员.
2.外部类想要访问内部类,必须创建内部类的对象
产生的.class文件
1.外部类正常产生
2.内部类产生 外部类名$内部类名.class
什么时候使用内部类?
一般使用内部类都在设计阶段。
当我们进行分析问题时,发现某个实体内还包含其它的实体,例如,
人是一个实体,人的心脏或人的大脑也可以当作单独的一个实体。
它们都在人体中,那么我们在设计时,就可以使用内部类来定义
class 人{
private class 大脑{}
private class 心脏{}
}
内部类的访问
建议使用的方式:
对于内部类来说,一般我们访问时,内部类的外部类都会提供公共的方式
来让外部去访问内部类.
1.如果内部类不是用private修饰,而是使用默认的权限修饰符或public
并且当前内部类定义在成员位置上。
我们可以这样访问
格式 外部类名.内部类名 引用名=new 外部类名().new 内部类名();
这样也可以得到一个内部类对象.
2.如果内部类定义在成员的位置上,那么你可以使用成员修饰符 public private static等
如果当前内部类使用了static修饰
如果类是使用static修饰,那么它只能访问static成员。
注意:如果内部类中有static成员,那么这个内部类必须是static。
对于以上这种情况的内部类它的访问我们可以分成两种
1.类是用static修饰,但成员不是
外部类名.内部类名 引用名 = new 外部类名.内部类名();
2.类是用static修饰 成员也是
要访问成员
外部类名.内部类名.成员
如果想要在内部类中得到外部类的属性,其实在内部类中相当于持有一个外部类的对象
这个对象是
外部类名.this
这种什么时候使用,一般是在内部类中存在与外部类的属性相同名字的成员,这时想要访问
外部类的成员,就可以使用上面这种方式。
内部类定义在局部
生成的.class文件名 外部类名$编号内部类名.class
如果有编号,那么这个内部类是定义在局部位置上,如果没有定义在成员位置上。
如果内部类定义在局部位置上,那么去访问局部的成员属性时,这个成员属性必须是
final
class Demo
{
public static void main(String[] args)
{
OutDemo od=new OutDemo();
od.show(100);
}
}
class OutDemo
{
public void show(final int id){
//final int id=10;//局部的
//内部类 定义在局部
class InnerDemo
{
public void method(){
System.out.println(id);
}
}
InnerDemo ind=new InnerDemo();
ind.method();
}
}
匿名内部类
它就是内部类的一种简化写法
其实匿名内部类更加像一个对象,这个对象它对应的类没有名称。只是通过
特定的格式进行了重写。
格式 new 父类[接口]([参数]){
重写,
也可以创建独立的方法
}.方法
匿名内部类必须有继承 实现的关系,一般都是进行重写操作,也可以定义新的行为 。