Java中匿名内部类的语法及使用:
1、内部类:
什么是内部类?
在类的内部又定义了一个新的类,称为内部类。
内部类的分类:
静态内部类:类似于静态变量。
实例内部类:类似于实例变量。
局部内部类:类似于局部变量。
使用内部类编写的代码,可读性很差,能不用尽量不用。
测试代码
class A {
//静态内部类
static class Inner1 {
}
//静态变量
static String country = "China";
//实例内部类
public class Inner2 {
}
//实例变量
String name;
//方法内定义的类,局部的
public void doSom() {
//局部内部类
class Inner3 {
}
//局部变量
int n;
}
}
2、匿名内部类:
属于局部内部类的一种,这个类没有名字,故得名:匿名内部类。
理解匿名内部类主要是让我们以后在阅读别人代码的时候,能够看得懂,实际上自己写代码时很少使用。
为什么不建议使用匿名内部类?因它为有两个缺点:
缺点1:太复杂混乱,可阅读性差;
缺点2:类没有名字,以后想重复使用,却不能用。
3、用匿名内部类完成接口了的实现:
也就在这方面能够看得到匿名内部类了。
测试代码:
public class Test02 {
public static void main(String[] args) {
//要求:用People对象的sum()方法计算a + b
People p = new People();
//第一种:借助实现类MyMath
Compute c = new MyMath();
int result1 = p.sum(c, 10, 20);
System.out.println(result1); //输出:30
//第二种:使用匿名内部类
int result2 = p.sum(new Compute() {
public int add(int x, int y) {
return x + y;
}
}, 20, 30);
System.out.println(result2); //输出:50
}
}
//计算的接口
interface Compute {
//抽象方法
int add(int x, int y);
}
//MyMath类,实现计算接口
class MyMath implements Compute {
//实现接口中的抽象方法
public int add(int x, int y) {
return x + y;
}
}
class People {
public int sum(Compute c, int x, int y) {
return c.add(x, y);
}
}