本文讨论 Java 中的 Anonymous Inner 类及其用途。
匿名这个词的意思是 - 未知的名字。Java 匿名内部类也是如此。
没有名称且我们只需要为其创建单个对象的内部类称为 Java 匿名内部类。当我们必须做一些额外的事情(例如从类或接口重载方法)时必须创建对象的实例时,它很有用。
我们可以通过使用 Java 匿名内部类来做到这一点,而无需创建该类的子类。
换句话说,一个没有名字的类被称为 Java 匿名内部类。通常,每当我们创建一个新类时,它都有一个名称。
因此,Java 匿名内部类不用于创建新类。相反,我们用于覆盖类或接口的方法。
它们在图形编程中也很有用,我们为侦听器接口编写实现类。
Java 匿名内部类的语法类似于构造函数的调用,只是类定义也存在于代码块中。
语法:
这里, 指的是一个抽象/具体的类或一个接口。为了更好地理解匿名内部类的概念,让我们看看它与常规 Java 类有何不同。
- 我们可以使用普通类实现任意数量的接口,但匿名内部类一次只能实现一个接口。
- 一个常规类可以扩展另一个类并同时实现多个接口。而另一方面,匿名内部类一次只能做这些事情中的一件。
- 构造函数的名称与类的名称相同。这意味着我们可以在常规类中编写任意数量的构造函数,但对于匿名内部类则不然。
要了解有关 Java 内部类的更多信息,请参阅此文档。
匿名内部类也像 Java 中的任何本地类一样捕获变量。对局部变量的访问与封闭类相同。
封闭类的成员可由匿名类访问。但是,它不能访问那些不是 final 的局部变量(即使是那些存在于其封闭范围内的变量)。
此外,如果我们在匿名类中声明任何类型,它会隐藏在该范围内具有相同名称的其他声明。匿名内部类也有一些限制。
- 匿名内部类不允许声明静态初始化器或成员接口。
- 如果静态成员是常量变量,它们可以是匿名类的一部分。
它得出的结论是,我们可以在匿名类中声明一个字段、额外的方法、实例初始化程序和本地类。
我们可以使用两种主要方法来创建匿名内部类。这些包括使用:
- 一个类(抽象或具体)
- 一个界面
让我们一一看看。
首先,看下面的例子。
输出:
在这里,创建了一个类,其名称由编译器决定。该类扩展了 类并实现了 方法。
匿名类的对象是 。它是匿名类型 类的引用变量。请注意,我们将其保存为 以进行编译。
下面的代码是编译器如何生成内部类。
在上一节中,我们使用了一个类。但是在这里,我们将使用匿名内部类的接口。让我们通过一个例子来理解这一点。
输出:
在这里,创建了一个类,其名称由编译器决定。这个类实现了接口 Demonstration 并给出了 方法的实现。
匿名类的对象是 。它是 Demonstration 类型的引用变量。请注意,我们将其保存为 以进行编译。
下面的代码是编译器如何生成内部类。
匿名内部类根据声明和行为分为 3 种类型。
- 扩展类的匿名内部类。
- 实现接口的匿名内部类。
- 匿名内部类在方法/构造函数参数中定义。
让我们一一讨论这三种类型。
我们可以通过扩展一个 Thread 类来创建一个线程,我们也可以有一个匿名的内部类来扩展一个类。
我们在这里使用 关键字来创建一个引用父类类型的对象。看下面的例子。
输出:
我们可以通过实现 Runnable 接口来创建线程,匿名内部类也可以实现接口。我们使用 关键字来创建一个引用接口类型的匿名内部类对象。
输出:
方法或构造函数参数中的匿名内部类可用于 (图形用户界面)应用程序。在这里,我们使用匿名内部类作为参数并将其传递给方法或构造函数。
这是一个例子。
输出:
匿名内部类关闭了方法的局部变量,这是对内部类的额外优势。此外,这些类减少了冗长并提供了可重用性。
此外,这些类可以帮助开发人员,因为他们不必自己为每个类查找名称。我们可以同时使用匿名内部类声明和实例化一个类。
总的来说,匿名内部类是 Java 的优势之一。
要了解有关 Java 中匿名内部类的更多信息,请参阅此文档。
在本文中,我们讨论了 Java 匿名内部类。我们看到了常规类和匿名内部类之间的区别。
我们还讨论了 Java 匿名内部类的用法和优点。此外,我们通过代码和示例了解了实现和语法。我们甚至了解了各种类型的 Java 匿名内部类。
总之,Java 中的匿名内部类通过提供可重用性和减少冗长,增加了语言的功能性和多功能性。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/12949.html