Java匿名内部类

作者: 一个有故事的程序员 | 来源:发表于2017-08-31 22:03 被阅读57次

导语

学完匿名内部类就懂的情书。

// 情书
// 在我的世界你永远18岁
me.world(new You() {  // 在我的世界只有最初的你
            public void getAge() {  // 你的年龄
                System.out.println("18岁");  // 永远18岁
            }
        });

主要内容

  • 接口与抽象类和匿名内部类的关系

具体内容

匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
为什么需要存在有匿名内部类。

范例:观察如下代码

interface Message {
    public void print();
}

class MessageImpl imlements Message {
    public void print() {
        System.out.println("Hello World !");
    }
}

public class TestDemo {
    public static void main(String args[]) {
         fun(new MessageImpl());
    }
    
    public static void fun(Message msg) {
        msg.print();
    }
}

输出结果:

Hello World !

正常的规律就是一个接口或者是抽象类需要有子类,子类要覆写所有的抽象方法。
可是如果说现在的MessageImpl子类只使用唯一的一次,那么还有必要将其单独定义为一个类吗?所以这个时候,就可以采用匿名内部类的方式进行代码的简化。

范例:简化后的代码

interface Message {
    public void print();
}

public class TestDemo {
    public static void main(String args[]) {
        fun(new Message() {
            public void print() {
                System.out.println("Hello World !");
            }
        });
    }
    
    public static void fun(Message msg) {
        msg.print();
    }
}

输出结果:

Hello World !

下面这个代码块就被称为匿名内部类。

{
    public void print() {
        System.out.println("Hello World !");
    }
}

使用匿名内部类的时候,有一个前提:必须要基于接口或抽象类的应用。
但是需要强烈强调的是,如果匿名内部类定义在了方法里面,方法的参数或者是变量要被匿名内部类所访问,那么必须加上final关键字(JDK 1.8之后此要求被改变了)。

总结

匿名内部类是在抽象类和接口的基础上发展的,匿名内部类的最大好处是帮助用户减少了类的定义。

更多内容戳这里(整理好的各种文集)

相关文章

  • Kotlin-Object关键字作用

    Object关键字使用场景:匿名内部类、单例、伴生对象。 匿名内部类 Kotlin匿名内部类定义使用跟Java类似...

  • 获取Java匿名内部类持有的外部类对象

    熟悉Java的应该都知道,Java匿名内部类会隐式持有一个外部类对象。所以在匿名内部类里可以调用外部类各个方法。 ...

  • 热修复原理拆解个人笔记(一)

    源于sophix文档: 内部类/外部类java编译器对内部类的处理 匿名内部类匿名内部类 类加载类加载时间 fin...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • java之内部类(InnerClass)详解

    参考文章 java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • 16. 对象声明与伴生对象

    匿名内部类 匿名内部类主要是针对那些获取抽象类或者接口对象而来的。最常见的匿名内部类点击事件: 上面这个是Java...

  • android 内存泄漏的初级见识

    内部类的使用 java的非静态内部类和匿名内部类会默认包含外部类的引用,因此在非静态(或匿名)内部类中我们可以直接...

  • java中的匿名内部类总结

    Java中的匿名内部类总结 匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来...

网友评论

  • 知识学者:new Message() {
    public void print() {
    System.out.println("Hello World !");
    }
    }
    这个是匿名内部类吧。
    你好像掉了一点东西。
    知识学者:@一个有故事的程序员 :sweat: 好像是的,是对象,我搞混了。。。。。。
    一个有故事的程序员:@东风冷雪 我看的那个就是这样的,那个代码块就是一个没有名字的类。加上new Message(),一起的话,应该算是一个new了一个对象吧?我是这么认为的。
    知识学者:匿名内部类东西很多,要写一大片,在和静态一起,更麻烦。。

本文标题:Java匿名内部类

本文链接:https://www.haomeiwen.com/subject/uqucjxtx.html