java学习笔记
java匿名内部类主要原则
本 文 目 录
Java匿名内部类的主要原则是隐式性和简洁性。它们允许我们在不使用显式类名的情况下创建类,从而使代码更简洁、更清晰。
关于Java匿名内部类隐式性和简洁性的代码举例
假设我们有一个接口Greeting
:
public interface Greeting {
void sayHello();
}
通常,我们需要创建一个实现该接口的类:
public class HelloGreeting implements Greeting {
@Override
public void sayHello() {
System.out.println("Hello!");
}
}
然后,我们可以在代码中使用这个实现类:
public class GreetingMain {
public static void main(String[] args) {
Greeting greeting = new HelloGreeting();
greeting.sayHello(); // 输出 "Hello!"
}
}
但是,使用匿名内部类,我们可以将实现类和使用类合并在一起,使代码更简洁。以下是使用匿名内部类的代码:
public class GreetingMain {
public static void main(String[] args) {
// 在这里直接创建一个实现了Greeting接口的匿名内部类
Greeting greeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Hello from anonymous class!");
}
};
greeting.sayHello(); // 输出 "Hello from anonymous class!"
}
}
在这个例子中,我们没有显式创建一个实现Greeting
接口的类,而是直接在需要使用它的地方创建了一个匿名内部类。这使得代码更简洁,不需要额外的类定义。同时,这个匿名内部类还可以直接访问包含它的外部类的成员变量和方法(即使是私有的),这也是匿名内部类的一个优势。
以下是对代码的逐行解释
public class GreetingMain {
这一行定义了一个名为GreetingMain
的公共类。在Java中,每一个public的类都要定义在一个与类名相同的文件中,所以这个文件应该被命名为GreetingMain.java
。
public static void main(String[] args) {
这一行定义了程序的main
方法,它是Java应用程序的入口点。当你运行一个Java应用程序时,它是首先被执行的方法。
Greeting greeting = new Greeting() {
这里我们声明了一个名为greeting
的Greeting
类型的变量。然后我们使用new Greeting()
开始创建一个新的Greeting
对象。但注意,我们没有给出一个具体的类来实现Greeting
,而是直接开始定义一个匿名内部类。
@Override
public void sayHello() {
这部分是匿名内部类的核心。我们在这里覆盖了Greeting
接口的sayHello
方法。由于这是一个匿名内部类,所以我们没有为它提供一个名字,而是直接在创建它的地方定义它的行为。
System.out.println("Hello from anonymous class!");
在覆盖的sayHello
方法中,我们打印了一条消息:"Hello from anonymous class!"。
}
};
这两行代码结束了我们的匿名内部类的定义和对象的创建。
greeting.sayHello(); // 输出 "Hello from anonymous class!"
这里我们调用了greeting
对象的sayHello
方法,这将执行我们在匿名内部类中定义的打印语句,输出"Hello from anonymous class!"。
}
}
这两行代码分别结束了main
方法和GreetingMain
类的定义。