匿名内部类
类的本体:
在类声明部分,大括号里面的就是类的本体
class Test{
//成员变量
//成员方法
}
匿名内部类就是没有名字的类,但是有类的本体
具体见代码中的注释
代码:
import java.util.Arrays;
import java.util.Comparator;
//抽象类Animal
abstract class Animal{
public abstract void test();
abstract public void jump();
}
//A接口
interface A{
int num = 10;
public void testA();
}
//CodingMonkey继承了抽象类,要实现里边未实现的方法
class CodingMonkey extends Animal{
@Override
public void test() {
// TODO Auto-generated method stub
System.out.println("test方法...");
}
@Override
public void jump() {
// TODO Auto-generated method stub
System.out.println("You jump,I jump!");
}
}
public class Demo {
public static void main(String[] args) {
Animal an = new CodingMonkey(); //多态 父类的引用指向子类的对象
an.test();
an.jump();
Animal a = new Animal() {
/*
Animal是一个抽象类,a是抽象类的一个引用类型变量
new Animal(){
发现这里面的内容和继承该抽象类的子类内容一致,
都是抽象类,要求子类实现的方法
这里是类的本体
而这里可以看做是一个类,但是这个类没有名字
所以,这就是【匿名内部类】
这里创建了一个【匿名内部类】的对象,赋值给了Animal的引用数据类型a
这里隐含了一个【继承】的关系
}
*/
@Override
public void test() {
// TODO Auto-generated method stub
System.out.println("匿名内部类的里面的test方法");
}
@Override
public void jump() {
// TODO Auto-generated method stub
System.out.println("匿名内部类的jump方法");
}
};
a.test();
a.jump();
//匿名内部类的匿名对象直接调用方法
new A() {
//这里是一个类【遵从】接口之后,要求实现接口中的抽象方法,
//这里也是一个匿名内部类
@Override
public void testA() {
// TODO Auto-generated method stub
System.out.println("匿名内部类实现A接口中的testA方法");
}
}.testA();
Integer[] arr = {3, 5, 8, 2, 4,6};
//匿名内部类的匿名对象作为方法的参数
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o1 - o2;
}
});
System.out.println(Arrays.toString(arr));
}
}