内部类:
1. 什么是内部类?
在类的内部,又定义了一个新的类,该类被称为内部类。
2.内部类的分类
- 静态内部类
类似于静态变量,通过static修饰
- 实例内部类
类似于实例变量
- 局部内部类
局部内部类是定义在方法内部的,出了这个方法就释放了,不能再访问
类似于局部变量
public class Test01{
//静态内部类
public static class A{//可以加任何修饰符
}
public static void main(String[] args){
}
//实例内部类
public class B{//可以加任何修饰符
}
public void doSome(){
//局部内部类
//局部内部类出了这个方法就不能访问了
class C{
}
}
}
内部类除了局部内部类其他的都可以用四个访问修饰符修饰
3.匿名内部类
- 不使用匿名内部类
public class Test01{
public static void main(String[] args){
MyMath mm = new MyMath();
mm.mySum(new ComputeImp(),100,200);//300
}
}
interface Compute{//接口
int sum(int a,int b);
}
class ComputeImp implements Compute{//实现类
public int sum(int a,int b){
return a+b;
}
}
class MyMath{//另一个类
public void mySum(Compute c,int x, int y){//多态
System.out.println(c.sum(x,y));
}
}
事实上,也可以不定义实现类,直接使用匿名内部类:
public class Test01{
public static void main(String[] args){
MyMath mm = new MyMath();
//使用匿名内部类
mm.mySum(new Compute(){
public int sum(int a,int b){
return a+b;
}
},200,200);//300
}
}
interface Compute{
int sum(int a,int b);
}
/*
class ComputeImp implements Compute{
public int sum(int a,int b){
return a+b;
}
}
*/
class MyMath{
public void mySum(Compute c,int x, int y){
System.out.println(c.sum(x,y));
}
}
从上面的代码可以看出,匿名内部类相当于一个“局部变量”,只能使用一次。一般不使用匿名内部类,代码可读性不强
匿名内部类没有名字,不能重复使用