Java中的匿名内部类的格式和实现

Java中的匿名内部类的格式和实现

定义格式:

接口名称 对象名 = new 接口名称(){//匿名类,但有对象名
  	//覆盖重写所有抽象方法
};

new 接口名称(){//匿名类+匿名对象
  //覆盖重写所有抽象方法
}.实现的成员方法
  
public interface Anonymous {
    public abstract void anoAbs1();
    public abstract void anoAbs2();
}
public class AnonymousMain {
    public static void main(String[] args) {
        Anonymous obj = new Anonymous() {
            @Override
            public void anoAbs1() {
                System.out.println("匿名内部类1,有对象名1111");
            }

            @Override
            public void anoAbs2() {
                System.out.println("匿名内部类1,有对象名2222");
            }
        };
        obj.anoAbs1(); //new出来的命名后可以用多次,调用不同方法,但是只能new一个对象
        obj.anoAbs2();

        //如果只需要用一次,以下,匿名对象优势匿名内部类,只能用一个方法
        new Anonymous() {
            @Override
            public void anoAbs1() {
                System.out.println("匿名内部类1,无对象名1111");
            }

            @Override
            public void anoAbs2() {
                System.out.println("匿名内部类1,无对象名2222");
            }
        }.anoAbs1(); // 这里只能用一个方法
    }
}
匿名内部类1,有对象名1111
匿名内部类1,有对象名2222
匿名内部类2,无对象名1111

另外还要注意几点问题:

  1. 匿名内部类,在创建对象的时候,只能使用唯一次。
  • 如果希望多次创建对象,而且类的内容一样的话, 那么就必须使用单独定义的实现类了。
  1. 匿名对象,在调用方法的时候,只能调用唯一次。
  • 如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
  1. 匿名内部类是省略了实现类/子类名称,但是匿名对象是省略了对象名称
  • 强调:匿名内部类匿名对象不是一回事! ! !
  1. 匿名内部类可以作为方法的参数

你可能感兴趣的:(Java初级进阶)