匿名内部类

810 阅读1分钟
  • 匿名内部类是局部内部类的更深入一步。
  • 假如只创建某类的一个对象时,就不必将该类进行命名。
  • 匿名内部类的前提是存在一个类或者接口,且匿名内部类是写在方法中的。
  • 只针对重写一个方法时使用,需要重写多个方法时不建议使用
  • 格式:
new 类名或接口名(){
    重写方法;
};     //注意分号
//以上就是内部类的格式,其实这整体就相当于是new出来的一个对象
  1. 不使用匿名内部类来实现抽象方法

    abstract class Animals {
        public abstract void jump();
    }
    
    public class Cat extends Animals {
        @Override
        public void jump() {
            System.out.println("猫会跳");
        }
    }
    
    public class main {
        public static void main(String[] args) {
            Animals animals = new Cat();
            animals.jump();
        }
    }
    
  2. 匿名内部类的实现

abstract class Animals {
    public abstract void jump();
}

public class main {
    public static void main(String[] args) {
        Animals animals = new Animals() {
            @Override
            public void jump() {
                System.out.println("猫会跳");
            }
        };
        animals.jump();
    }
}
  1. 在接口上实现内部类
interface Animals {
    void jump();
}

public class main {
    public static void main(String[] args) {
        Animals animals = new Animals() {
            @Override
            public void jump() {
                System.out.println("猫会跳");
            }
        };
        animals.jump();
    }
}

最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接

  1. thread类的匿名内部类的实现
public class main {
    public static void main(String[] args) {
       Thread thread = new Thread(){
       public void run(){
           for (int i=0;i<3;i++){
               System.out.println(i);
           }
       }
       };
       thread.start();
    }
}
  1. Runnable接口匿名内部类的实现
public class main {
    public static void main(String[] args) {
       Runnable runnable = new Runnable(){
       public void run(){
           for (int i=0;i<3;i++){
               System.out.println(i);
           }
       }
       };
       Thread thread = new Thread(runnable);
        thread.start();
    }
}