美文网首页Java
java 匿名内部类

java 匿名内部类

作者: zhbi98 | 来源:发表于2021-09-11 08:32 被阅读0次

1. 匿名内部类介绍

使用 Java 编程时,常常需要创建不会被再次使用的对象。在这种情况下,非常适合使用一种特殊
的内部类:匿名内部类。这种类没有名称,是在同一条语句中声明和创建的。
要使用匿名内部类,可将引用对象的代码替换为关键字 new、对构造函数的调用以及用大括号
({和})括起的类定义。
既然是匿名类,所以你无法在别的地方实例化和使用这个类。
匿名内部类也可用于接口(interface)的实现

特点

匿名对象:没有名字的对象。
new ClassName().run();

非匿名对象:含有名字的对象。
ClassName c=new ClassName();
c.run();

2. 匿名内部类语法

例如一般的写法:

ThreadClass task = new ThreadClass();
Thread runner = new Thread(task);
runner.start();

转化成:

Thread runner = new Thread(new Runnable() {
    public void run() {
        // thread does its work here
    }
});
runner.start();

即,这相当于将 Thread(task)的参数task替换成下面的代码实现:

new Runnable() {
    public void run() {
        // thread does its work here
    }
}

2.1 匿名内部类的另一种写法

new 类名或者接口名() {
    重写方法;
}

var t = new Thread() {
    public void run() {
        这是被重写的方法;
    }
}

3. 我的代码实现

class GoogleInc {
    void google1() {
        System.out.println("Google 1 Inc class, google 1");
    }

    void google2() {
        System.out.println("Google 2 Inc class, google 2");
    }
}


class AnonymousClass {
    AnonymousClass(GoogleInc golc) {
        golc.google1();
        golc.google2();
    }
}


public class AnonymousInnerClass {
    public static void main(String[] args) {
        AnonymousClass gc = new AnonymousClass(new GoogleInc() {
            // Overloaded function [google1()]
            void google1() {
                System.out.println("Anonymous inner class, google 1");
            }

            void doAnotherAnything() {
                System.out.println("Do another anything");
            }
        });
    }
}

4. 使用匿名内部类实现接口

HardwareInc这是一个接口,这个接口同时还继承了另外一个接口,继承另外一个接口只是将另外一个接口的抽象方法添加到这个接口中,并没有其他的特别之处,这样这个接口中的抽象方法总数为这个接口的抽象方法数加另一个接口的抽象方法数

public interface HardwareInc {
    public void designPhone();
    public void designComputer();
    public void designWatch();
}

class HuaweiInc {
    // Use anonymous inner classes to implement interfaces HardwareInc
    HuaweiInc(HardwareInc hwi) {
        hwi.designPhone();
        hwi.designComputer();
        hwi.designWatch();
        hwi.elec();
        hwi.software();
    }
}

// Use anonymous inner classes to implement interfaces HardwareInc
HuaweiInc HwInc = new HuaweiInc(new HardwareInc() {
    @Override
    public void designPhone() {
        System.out.println("Huawei design Huawei mate40");
    }

    @Override
    public void designComputer() {
        System.out.println("Huawei design Huawei matebook");
    }

    @Override
    public void designWatch() {
        System.out.println("Huawei design watchGT");
    }

    @Override
    public void elec() {
        System.out.println("Huawei have elec developer");
    }

    @Override
    public void software() {
        System.out.println("Huawei have software developer");
    }
});

相关文章

  • 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中的匿名内部类总结 匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来...

网友评论

    本文标题:java 匿名内部类

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