匿名内部类
顾名思义,匿名内部类是没有名字的类,不是声明的时候没有类名,实例化的时候咱们可以不写变量的名字。
基于abstract的匿名内部类
/**
* 匿名内部类:没有名字的类,不是声明的时候没有类名,实例化的时候咱们可以不写变量的名字
*/
abstract class AbstractTest{
abstract public void testInner();
}
class TestA extends AbstractTest{
@Override
public void testInner() {
System.out.println("常规通过继承调用testInner方法");
}
}
public class Demo1 {
public static void main(String[] args) {
//常规来说,抽象类是不能实例化的,此处是利用匿名内部类对象
//来实现的
AbstractTest at = new AbstractTest() {
@Override
public void testInner() {
System.out.println("匿名内部类对象调用该方法");
}
};
at.testInner();
/*使用匿名内部类,并且创建一个对象,而这个名字没有对象*/
new AbstractTest(){
@Override
public void testInner() {
System.out.println("匿名内部类的匿名对象调用了这个方法");
}
}.testInner();
test(new TestA());
test(new AbstractTest() {
@Override
public void testInner() {
System.out.println("匿名内部类匿名对象直接操作方法的参数");
}
});
}
public static void test(AbstractTest t){
t.testInner();
}
}
基于接口的匿名内部类
interface A{
public void testInterface();
}
public class Demo2 {
public static void main(String[] args) {
A a = new A() {
@Override
public void testInterface() {
System.out.println("匿名内部类的对象调用该方法");
}
};
a.testInterface();
new A(){
@Override
public void testInterface() {
System.out.println("匿名内部类的匿名对象调用该方法");
}
}.testInterface();
}
}