内部类的基本概念
当一个类的定义出现在另外一个类的类体中时,那么这个类叫做颞部列,而这个内部类所在地的类叫做外部类。
类中的内容:成员变量、成员方法、构造方法、静态成员、构造块、静态代码块、内部类。
内部类的分类
普通内部类: 直接将一个类的定义放在另外一个类的类体中。
静态内部类:使用static关键字稀释的内部类,属于类层级。
局部内部类:直接讲一个类的定义放在方法体的内部时。
匿名内部类:就是指没有名字的内部类。
普通(成员)内部类的格式
访问修饰符 class 外部类的类名{
访问修饰符 class 内部类类名{
内部类的类体;
}
}
public class inner {
public class innerin{
}
}
如何调用内部类
public class inner {
private int cnt=1;
public class innerin{
private int ca=2;
public innerin(){
System.out.println("普通内部类的构造方法执行到了!");
}
public void show(){
System.out.println("外部部类变量cnt"+cnt+"!");//1
System.out.println("内部类的变量ca"+ca);//2
}
}
}
public class test {
public static void main(String[] args) {
inner on=new inner();
inner.innerin i= on.new innerin();
i,show();
}
}
内部类的使用方式
public class inner {
private int cnt=1;
private class innerin{
private int ca=2;
public innerin(){
System.out.println("普通内部类的构造方法执行到了!");
}
public void show(){
System.out.println("外部部类变量cnt"+cnt+"!");//1
System.out.println("内部类的变量ca"+ca);//2
}
}
}
普通内部类和普通类一样可以定义成员变量、成员方法以及构造方法等。
普通内部类和普通类一样可以使用final乎哟这abstract关键字修饰。
普通内部类还可以使用private或者protected关键字进行修饰。
普通内部类需要使用外部类对象来创建对象。
如果内部列访问外部类中与本类内部类同名的成员变量用this关键字。
静态内部列
静态内部类格式
访问修饰符 class 外部类类名{
访问修饰符 static class 内部类的类名{
内部类类体;
}
}
静态内部类的使用方式
静态内部类不能直接访问外部类的非静态成员
静态内部类可以直接创建对象
如果静态内部类访问外部类中与本类内同名的成员变量过着方法时需要使用类名. 的方式访问
局部内部类的核格式
访问修饰符 class 外部类名{
访问修饰符 返回值类型 成员方法名 (形参列表){
class 内部类的类名{
内部类类体
}
}
}
public class test {
private int a=1;
public void show(){
class abc{
}
}
}
局部内部类的使用方式
局部内部类只能在该方法的内部可以使用。
局部内部类可以再方法体内部直接创建对象。
局部内部类不能使用访问控制符和static关键字修饰。
局部内部类可以使用外部方法的局部变量,但是必须是final的。
匿名内部类
匿名内部类的语法格式
接口/父类类型 引用变量名 =new 接口/父类类型(){
方法的重写
}