专栏【Java】
欢迎并且感谢大家指出我的问题🥰
愿大家在努力的路上都能取得收获
目录
在 Java 编程的奇妙世界里,匿名内部类是一种独特且强大的编程结构,它为我们提供了更加灵活和简洁的代码编写方式。今天,就让我们一同深入探索 Java 匿名内部类的奥秘。
一、什么是 Java 匿名内部类
匿名内部类,从名字上就可以看出它的独特之处 —— 没有明确的类名。它是在需要使用某个类的实例的地方,直接定义并创建该类的一个子类对象。这个子类可以重写父类或实现接口中的方法,并且不需要为这个子类单独命名。
例如,当我们有一个接口Runnable,它只有一个run方法:
public interface Runnable {
void run();
}
通常情况下,我们实现这个接口可能会定义一个类:
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("This is a normal implementation of Runnable.");
}
}
然后创建这个类的实例来使用:
MyRunnable myRunnable = new MyRunnable();
myRunnable.run();
如果这个接口我们只用一次,那未免也太浪费了,所以使用匿名内部类,我们可以简化这个过程:
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("This is an anonymous inner class implementation of Runnable.");
}
};
runnable.run();
在这个例子中,new Runnable() {... }就是一个匿名内部类,它实现了Runnable接口,并且直接创建了一个该接口的实例,而无需单独定义一个命名类。
二、Java 匿名内部类的特点
没有类名
这是匿名内部类最显著的特点。由于没有类名,它只能在定义的地方被使用一次,并且不能在其他地方复用。这种特性使得代码更加紧凑,适用于只需要使用一次的类实现。
定义和实例化同时进行
匿名内部类在定义的同时就创建了一个实例,不需要像普通类那样先定义类,再创建实例。这种方式减少了代码的冗余,提高了代码的编写效率。
可以访问外部类的成员
匿名内部类可以访问其外部类的成员,包括私有成员。这是因为匿名内部类与外部类之间存在一种特殊的关联,它可以直接访问外部类的状态和行为。