1.内部类:一个类内部包含另一个类,内部类和外部类不是继承关系;
1>成员内部类:<1>格式:修饰符 class 外部类名{
修饰符 class 内部类名{
... }
... }
<2>使用:- 间接方法:外部类方法中,使用内部类,通过main调用外部类的方法;
- 直接方法:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
<3>外部和内部类变量重名:本类重名用this,内外重名用:外部类名.this. 外部类成员变量名
2>局部内部类:<1>格式:修饰符 class 外部类名{
修饰符 返回值类型 外部类方法名(参数列表){
class 局部内部类名称{
..... }
..... }
......}
<2>只有当前方法可以使用,方法外就不能使用,可调用外部类的方法,顺道用内部类方法;
<3>final问题:局部内部类访问所在方法的局部变量时,这个局部变量必须是final不能变的;
3>匿名内部类(包含在局部内部类里):<1>概念:若接口的实现类或父类的子类只需要用一次,可以省略,
改成使用匿名内部类(可以省掉一个实现类的建立);
<2>格式:// 接口名称 对象名 = new 接口名称(){ 重写所有抽象方法 }
<3>注意事项:- 接口名称 指匿名内部类需要实现哪个接口;
- {...}匿名内部类的内容;
- 匿名内部类创建几个对象时,使用几次;
- 匿名内部类省略了实现类/子类名,匿名对象省略了对
象名;
4>定义一个类的时候,权限修饰符规则:<1>外部类:public / (default);
<2>成员内部类:public / protected / (default) / private;
<3>局部内部类:什么都不写。