匿名内部类
匿名内部类可以使你的代码更加简洁,你可以在定义一个类的同时对其进行实例化。他与局部类很相似,不同的是他没有类名,如果某个局部类你只需要用一次,那么你就可以使用匿名内部类。
定义内部类
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。
public interface Jumpping {
void jump();
}
public class JumppinOperator {
public void method(Jumpping j){
j.jump();
}
}
class JumppingDemo{
public static void main(String[] args) {
//创建接口操作类的对象,调用method方法
JumppinOperator i=new JumppinOperator();
// Jumpping j=new Cat();
i.method(new Jumpping(){
public void jump(){
System.out.println("猫跳高");
}
});
}
}
注意:
1.若是没有匿名内部类,需要用Cat来实现Jumpping接口,再实例化调用方法
2.匿名类是一个表达式,所以在使用时最后要用";"结尾。
语法
new 类名或者接口名(){
重写方法;
}
匿名内部类包含以下几部分:
1.操作符:new
2.一个要实现的接口或者要继承的类
3.括号(),如果有构造参数,要带上构造参数,如果实现一个接口,空括号即可。
4.{}声明主体
5.末尾的“;”
访问作用域内的局部变量,定义和访问匿名内部类成员
匿名内部类与局部内部类对作用域内的变量拥有相同的访问权限
1.匿名内部类可以访问外部内的所有成员
2.匿名内部类中不能定义静态属性方法
3.匿名内部类可以有常量属性
5.匿内部类中可以有额外的方法(父类中没有的)
5.匿名内部类中可以定义内部类
6.匿名内部类中可以对其他类进行实例化