Java 实现Runnable的内部类和匿名内部类
在Java中,内部类和匿名内部类是两种嵌套类的类型。这里,嵌套类指的是在另一个类中定义的类。内部类是没有static关键字定义的嵌套类,也就是非静态嵌套类。没有名字的嵌套内部类被称为匿名类。
Runnable接口是在Java多线程中创建线程的一种方式。Java提供了多线程功能,可以同时执行多个操作。它将操作分成多个较小的部分,称为线程。让我们来看看如何使用实现Runnable的内部类和匿名内部类。
实现Runnable的内部类和匿名内部类
在这个部分,我们将学习实现Runnable接口的内部类和匿名内部类。
Java程序演示实现了Runnable的内部类
让我们从介绍内部类开始。
内部类
非静态或内部类可以访问其外部类的所有静态和非静态方法以及成员变量。它也可以访问私有成员,但外部类无法访问内部类的私有成员。内部类是最常用的一种嵌套类。
语法
class Class_otr {
// Outer class body
class Class_inn {
// Inner class body
}
}
创建类时我们使用了’class’关键字。’Class_otr’是外部类的名称,’Class_inn’是内部类的名称。
示例1
以下示例演示了实现实现Runnable接口的内部类的实用实现。
方法
- 首先,定义一个外部类,在其内部定义实现Runnable接口的内部类。
-
在这个内部类中,创建它的构造函数并重写’run()’方法。
-
进一步定义另一个方法,在这个方法中,创建两个内部类的实例。使用这些实例创建两个线程来执行操作。然后,使用内建方法’start()’启动线程的过程。
-
在main()方法中,创建一个Outer类的实例,并调用’executeThread()’方法来启动操作。
class OtrClass {
// Creating an Inner class that implements Runnable
class InrClass implements Runnable {
private String greet;
// Constructor
public InrClass(String greet) {
this.greet = greet;
}
// Overriding the run() method
public void run() {
System.out.println(greet);
}
}
// defining method to execute threads using inner classes
public void executeThread() {
// instances of the inner class
InrClass ic1 = new InrClass("Hello and Welcome!!");
InrClass ic2 = new InrClass("Tutorials Point");
// Creating threads with instances of inner class
Thread thr1 = new Thread(ic1);
Thread thr2 = new Thread(ic2);
// Start the threads
thr1.start();
thr2.start();
}
}
public class RunableExp1 {
public static void main(String[] args) {
OtrClass oc = new OtrClass(); // instance of Outer class
oc. executeThread(); // calling method to start threads
}
}
输出
Hello and Welcome!!
Tutorials Point
Java程序示例:展示实现Runnable的匿名内部类
在进入程序之前,让我们讨论一下匿名内部类。
匿名内部类
如前所述,匿名内部类是一种没有名称的内部类。它的声明和初始化同时进行。它主要用于覆盖方法。
我们可以使用abstract关键字声明匿名类。
语法
Class_name object_name = new Class_name() {
return_type method_name() {
// code to be executed
}
};
示例2
下面的示例演示了使用实现Runnable接口的匿名内部类。
步骤
- 创建一个实现Runnable接口的抽象类。
-
然后,在main()方法内部创建一个匿名内部类,重写前面的抽象类。
-
在这个匿名内部类内部,重写内置方法’run()’。
-
创建一个线程,并使用’start()’方法启动它。
// abstract class that implements Runnable
abstract class Anonymous implements Runnable { }
public class RunableExp2 {
public static void main(String args[]) {
// creating anonymous inner class
Anonymous thr = new Anonymous() {
// overriding run() method
public void run() {
System.out.println("Hello! from anonymous inner class");
}
};
Thread thr1 = new Thread(thr); // defining a thread
thr1.start(); // starting the thread
}
}
输出
Hello! from anonymous inner class
结论
我们开始这篇文章是通过定义内部类和匿名内部类,接下来我们详细讨论了它们。此外,我们还发现了在Java中用于执行多线程操作的Runnable接口。我们看到了两个不同的内部类和匿名内部类的示例,它们实现了Runnable接口。