🌈🌈😄😄
欢迎来到茶色岛独家岛屿,本期将为大家揭晓Java匿名内部类,做好准备了么,那么开始吧
🌲🌲🐴🐴
目录
匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类
new 父类构造器(实参列表)| 实现接口(){
// 匿名内部类的类体部分
}
-
- interface A{
- public abstract void fun1();
- }
- public class Outer{
- public static void main(String[] args) {
- new Outer().callInner(new A(){
- //接口是不能new但此处比较特殊是子类对象实现接口,只不过没有为对象取名
- public void fun1() {
- System.out.println("implement for fun1");
- }
- }); // 两步写成一步了
- }
- public void callInner(A a) {
- a.fun1();
- }
- }
-
出现new但并没有指定对象名称,则为匿名对象
上面所说,接口是不能new的,可能很多小伙伴会有疑惑,看下面代码
- new Thread(new Runnable() {
- @Override
- public void run() {
- for(int i = 0;i<=40;i++){
- ticket.sell();
- }
- }
- },"C").start();
上述中是使用了匿名内部类的方法,用new是为了实现Runnable接口,重写方法,只不过这个类是匿名的,没有名字,并且对象的创建最终都是需要调用构造方法,接口中是没有构造方法的,类中显示声明构造方法,但默认有空参构造方法,接口中是没有的
匿名内部类是内部类的一种特殊情况。它只有一个实例,而且没有引用。所以,一般在能用内部类实现,但是实例只用一次的情况下使用它(可以减少资源开销)。