6.8匿名内部类

匿名内部类

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

  • 匿名内部类的格式:
    接口名称 对象名 = new 接口名称{//覆盖重写所有抽象方法};
package InnerClass.匿名内部类;

public interface MyaInterface {
    public abstract  void mehtod();
    void method();
}

package InnerClass.匿名内部类;

public class MyInterfaceImpl implements MyaInterface {
    @Override
    public void mehtod() {
        System.out.println("覆盖接口可方法");
    }
}
package InnerClass.匿名内部类;

public class DemoMain {
    public static void main(String[] args) {
       /* MyaInterface obj = new MyInterfaceImpl();
        obj .mehtod();;*/
//        MyaInterface same = new MyaInterface() ;//错误写法
            MyaInterface  obj = new MyaInterface() {
                @Override
                public void mehtod() {
                    System.out.println("匿名内部类实现了方法");
                }
            };
    }
}

匿名内部类的注意事项

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

  • 另外需要注意的问题

1.匿名内部类,在【创建对象】的时候,只能唯一的 使用一次

2.匿名对象,在【调用方法】的时候,只能调用唯一一次。如果希望同一个对象,调用多次方法,那么必须给对象起个名字

3.匿名内部是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】强调:匿名内部类和匿名对象不是一回事!!!


public class DemoMain {
    public static void main(String[] args) {
       /* MyaInterface obj = new MyInterfaceImpl();
        obj .mehtod();;*/
//        MyaInterface same = new MyaInterface() ;//错误写法

        //使用匿名内部类,但不是匿名对象,对象名称就叫objA
          MyaInterface  objA = new MyaInterface() {
                @Override
                public void mehthod1() { System.out.println("匿名内部类实现了方法1a"); }

                @Override
                public void method2() { System.out.println("匿名内部类实现了方法2a"); }
            };
            objA.mehthod1();
            objA.method2();
        System.out.println("=======================");
        //使用了匿名内部类,而且省略了对象名称,也是匿名对象
        new MyaInterface() {
            @Override
            public void mehthod1() { System.out.println("匿名内部类实现了方法1b"); }

            @Override
            public void method2() { System.out.println("匿名内部类实现了方法2b"); }
        }.mehthod1();
        //因为匿名对象无法调用第二次方法,所以需要在创建一个匿名内部类的匿名对象才能调用两次方法


    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,441评论 0 4
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,563评论 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,856评论 0 10
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 浩言正语286:常在娱乐圈、社交网络看到所谓的明星,晒幸福与秀恩爱,就像电影预告片,精华都在这了。这就是为什么很多...
    永远的浩子阅读 79评论 0 2