携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
内部类分类
我们刚刚大概了解了内部类的语法和使用,可能有点绕,没有捋清楚,不要急,bug郭带你仔细学一遍!
根据内部类在外部类中的位置可以分为4种:
- 局部内部类,定义在外部类中的局部范围(方法和代码块中)
- 匿名内部类(学习的重点和难点)也通常定义在局部
- 成员内部类(定义在外部类的成员位置)
- 静态内部类(用
stataic修饰的内部类)
我会一一给大家详细介绍这四种内部类的使用方法和细节!
局部内部类
在外嵌类的局部位置,通常在方法中或代码块中!
局部内部类特点: 1.定义在外部类局部(方法或者代码块中) 2.作用域在局部,只能在他的作用域中使用(方法或者代码块中) 3.本质还是一个类(可以被继承) 4.属于局部变量,不能用限定符修饰(可用finall修饰后不可被继承) 5.内部类可以直接访问外部类中的属性和方法(包括private修饰) 6.外部类访问局部内部类,只能创建内部类对象访问(且只能在该局部中) 7.当外部类和内部类重名时,遵守就近原则
//局部内部类
class Outer{//外部类
private int m = 10; //属性
private static String s = "Outer";
public void f1(){ //方法
System.out.println("Outer::f1");
}
public void f2(){//方法
/*
局部内部类:
1.定义在外部类局部(方法或者代码块中)
2.作用域在局部,只能在他的作用域中使用(方法或者代码块中)
3.本质还是一个类(可以被继承)
4.属于局部变量,不能用限定符修饰(可用finall修饰后不可被继承)
5.内部类可以直接访问外部类中的属性和方法(包括private修饰)
6.外部类访问局部内部类,只能创建内部类对象访问(且只能在该局部中)
7.当外部类和内部类重名时,遵守就近原则
*/
class Inner {//内部类
private int a = 12;//属性
public void f2(){//方法
System.out.println("Inner::f2");
f1(); //局部内部类直接访问外部类成员和方法
System.out.println("Outer:private m="+m+" Inner::a="+a);
}
}
//外部类只能通过创建外部类对象访问内部类
Inner inner = new Inner();
inner.f2();//方法同名就近原则
class Inner1 extends Inner {//继承Inner类
}
}
}
public class Test_1{
public static void main(String[] args) {
Outer outer = new Outer();
outer.f2();
}
}

因为有前面学习的基础,bug郭就不一一列举代码了,可以自行尝试!