匿名内部类:
1. 什么是内部类?
内部类:在类的内部又定义了一个新的类,被称为内部类
2. 内部类分类:
- 静态内部类:类似于静态变量
- 实例内部类:类似于实例变量
- 局部内部类:类似于局部变量
package Day0223.Demo01;
public class Test01 {
//在类的内部且前面有static,所以被称为静态内部类
static class Inner1{
}
//在类的内部且前面没有有static,所以被称为实例内部类
class Inner2{
}
public void dosome(){
//局部变量
int i = 3;
//该类在类的内部,所以被称为内部类
//局部内部类
class Innne3{
}
}
}
3. 使用内部类编写代码可读性差,能不用尽量不用!
4. 匿名内部类是内部类的一种,
因为该类没有名字而得名,因此被称为匿名内部类
- 使用匿名内部类,表示这个ComputeImpl这个类没名字了
- 相当把ComputeImpl实现类{}的内容写在了new Computer(){}
- 但是不建议使用匿名内部类
- 因为一个类没有名字,无法重复使用,而且代码太乱,可读性差
public class Test01 {
public static void main(String[] args) {
MyMath mm = new MyMath();
//使用匿名内部类,表示这个ComputeImpl这个类没名字了
//相当把ComputeImpl实现类{}的内容写在了new Computer(){}
//但是不建议使用匿名内部类
//因为一个类没有名字,无法重复使用,而且代码太乱,可读性差
mm.mySum(new Computer() {
@Override
public int sum(int a, int b) {
return 0;
}
}, 100, 200);
}
}
//负责计算的接口
interface Computer{
//抽象方法
int sum(int a, int b);
}
//需自行写实现类
/*class ComputerImpl implements Computer{
@Override
public int sum(int a, int b) {
return a+b;
}
}*/
//数学类
class MyMath{
//数学求和方法
public void mySum(Computer c,int x,int y){
int reValue =c.sum(x, y);
System.out.println(x+"+"+y+"="+reValue);
}
}
5. 知道匿名内部类这回事即可,因为匿名内部类不常用
缺点:
1.代码杂乱,可读性差
2.类没有名字,无法重复使用