1. 成员内部类
1)格式:
修饰符 class 类名称
{
修饰符 class 类名称
{
//......
}
//......
}
2)内部类调用包含该内部类的外部类类成员变量与方法随意访问,反过来则需要使用内部类对象调用
3)使用内部类的方法:
间接方法:在外部类的方法中,使用内部类调用其中的方法与变量。
直接方法:外部类名.内部类名称 对象名 = new 外部类名称().new 内部类名称()
4)访问重名的外部类成员变量
出现重名情况,可以用:外部类名.this.外部类成员变量名称
public class Outer{ int num = 10;//外部类成员变量 public class Inner{ int num = 20;//内部类成员变量 public void method(){ int num =30;//内部类局部变量 System.out.println(num);//输出内部类局部变量,就近原则 System.out.println(this.num);//输出内部类成员变量 System.out.println(Outer.this.num);//输出外部类成员变量 } } }
2. 局部内部类
格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部类名称{
//......
}
}
}
3. 类定义时的权限修饰符规则
1)外部类:public/(default)
2)成员内部类:public/protected/(default)/private
3)局部内部类:什么都不用写
4. 匿名内部类
如果接口的实现类(或者父类的子类)只需要使用一次,就可以省略该类的定义,改为使用匿名内部类
接口名称 对象名 = new 接口名称(){
//覆盖重写接口中所有抽象方法
}
省略了实现类/子类名称,匿名对象则是省略了对象名称