Java内部类(一)——匿名内部类

来源:互联网 发布:大连网络教育报名 编辑:程序博客网 时间:2024/04/28 06:14

Java匿名内部类

顾名思义,就是没有名字的内部类。表面上看起来它们似乎有名字,实际上不是它们的名字。 ——百度百科

特性说明

  • 没有名字的类
  • 既然这个类没有名字,那么就只能使用一次,进而简化代码编写
  • 前提条件:必须继承一个父类或者实现一个接口

声明格式

new ParentName(){    ... // 内部类的定义}

实例分析

abstract class Animal {    public abstract void run();}class Fish extends Animal {    public void run() {        System.out.println("Swimming!");    }}public class Main {    public static void main(String[] args) {        Fish fish = new Fish();        fish.run();    }}// 运行结果:Swimming!

如果我们这个类只使用一次,那么我们创建这样一个类岂不是很浪费?所以就有了匿名内部类的出现。

abstract class Animal {    public abstract void run();}public class Main {    public static void main(String[] args) {        Animal fish = new Animal(){            public void run() {                System.out.println("Swimming!");            }        };    }}// 运行结果:Swimming!

对于接口,和抽象类的使用是一样的。


也就是说,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现。最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口。

public class Main {    public static void main(String[] args) {        Thread thread = new Thread(){            @Override            public void run(){                System.out.println("你好,匿名内部类!");            }        }        thread.start();    }}// 运行结果:你好,匿名内部类!

注意事项

  • 使用匿名内部类时,必须是继承一个类或者实现一个接口,但是两者不可兼得。
  • 匿名内部类中不能定义构造函数。
  • 匿名内部类中不能存在任何的静态成员变量和静态方法。
  • 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
原创粉丝点击