匿名内部类

Posted wurengen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名内部类相关的知识,希望对你有一定的参考价值。

匿名内部类

匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作,
  1. 定义子类
  2. 重写接口中的方法
  3. 创建子类对象
  4. 调用重写后的方法
我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。

前提

匿名内部类必须继承一个父类或者实现一个父接口。

格式

技术图片

代码举例

定义接口

package demo03;



public interface MyInterface 

    void method1(); // 抽象方法

    void method2();

定义实现类

package demo03;


public class MyInterfaceImpl implements MyInterface 
    @Override
    public void method1() 
        System.out.println("实现类覆盖重写了方法!111");
    

    @Override
    public void method2() 
        System.out.println("实现类覆盖重写了方法!222");
    

匿名内部类

package demo03;



/*
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,
那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。

匿名内部类的定义格式:
接口名称 对象名 = new 接口名称() 
    // 覆盖重写所有抽象方法
;

对格式“new 接口名称() ...”进行解析:
1. new代表创建对象的动作
2. 接口名称就是匿名内部类需要实现哪个接口
3. ...这才是匿名内部类的内容

另外还要注意几点问题:
1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。
如果希望多次创建对象,而且类的内容一样的话,那么就需要使用单独定义的实现类了。
2. 匿名对象,在【调用方法】的时候,只能调用唯一一次。
如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
3. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
强调:匿名内部类和匿名对象不是一回事!!!
 */
public class DemoMain 

    public static void main(String[] args) 
//        MyInterface obj = new MyInterfaceImpl();
//        obj.method();

//        MyInterface some = new MyInterface(); // 错误写法!

        // 使用匿名内部类,但不是匿名对象,对象名称就叫objA
        MyInterface objA = new MyInterface() 
            @Override
            public void method1() 
                System.out.println("匿名内部类实现了方法!111-A");
            

            @Override
            public void method2() 
                System.out.println("匿名内部类实现了方法!222-A");
            
        ;
        objA.method1();
        objA.method2();
        System.out.println("=================");

        // 使用了匿名内部类,而且省略了对象名称,也是匿名对象
        new MyInterface() 
            @Override
            public void method1() 
                System.out.println("匿名内部类实现了方法!111-B");
            

            @Override
            public void method2() 
                System.out.println("匿名内部类实现了方法!222-B");
            
        .method1();
        // 因为匿名对象无法调用第二次方法,所以需要再创建一个匿名内部类的匿名对象
        new MyInterface() 
            @Override
            public void method1() 
                System.out.println("匿名内部类实现了方法!111-B");
            

            @Override
            public void method2() 
                System.out.println("匿名内部类实现了方法!222-B");
            
        .method2();
    

 

以上是关于匿名内部类的主要内容,如果未能解决你的问题,请参考以下文章

java的内部类与匿名内部类

匿名内部类

到底什么是匿名内部类?

到底什么是匿名内部类?

该如何理解匿名内部类的功能?

匿名内部类