可运行接口实例化
Runnable interface instantiation
我正在阅读 Head first 这本书 java 并且正在阅读有关线程的内容并开始了解 Runnable 接口。现在我们知道接口不能直接实例化。它的成员由实现接口的任何 class 实现,但下面的代码让我头疼。书中声明了Runnable接口的实例,并赋值了runnable接口的实现对象class。
public class MyRunnable implements Runnable {
public void main() {
go();
}
public void go() {
doMore();
}
public void doMore() {
System.out.println("top of the stack");
}
}
class ThreadTester {
public static void main(String[] args) {
Runnable threadJob = new MyRunnable();
Thread myThread = new Thread(threadJob);
myThread.start();
System.out.println("back in pain");
}
}
我无法理解 Runnable threadJob = new MyRunnable();
行。接口在不允许时如何被实例化。为什么不能像 MyRunnable threadJob = new MyRunnable();
这样的行。我的意思是 MyRunnable class 通过了 Runnable 接口的 IS-A 测试,所以作者为什么选择前一个语句。那是我在这里缺少的东西吗?请帮我解释一下。
Now we know an interface can't be instantiated directly.
您没有直接实例化 Runnable
接口。
希望您同意以下内容应该有效:
MyRunnable threadJob = new MyRunnable();
Runnable runnable = threadJob; // since threadJob is a Runnable
那为什么那条线不起作用?
当我们说你不能直接实例化一个接口,意思是你不能写
Runnable runnable = new Runnable();
这是唯一不起作用的东西。
在 OOP 中称为多态性。
它说你可以从 classB
实例化(假设 ClassB
是 ClassA
的子 class)用 ClassA
类型定义变量,然后从 ClassB
并将其分配给该变量。
例如在 java 中对象 class 是任何 classes 的根所以你可以像下面那样做:
Object x = new YourClass();
或者如果例如你的 class implements
InterfaceA
你可以像这里那样做:
InterfaceA x = new YourClass();
我正在阅读 Head first 这本书 java 并且正在阅读有关线程的内容并开始了解 Runnable 接口。现在我们知道接口不能直接实例化。它的成员由实现接口的任何 class 实现,但下面的代码让我头疼。书中声明了Runnable接口的实例,并赋值了runnable接口的实现对象class。
public class MyRunnable implements Runnable {
public void main() {
go();
}
public void go() {
doMore();
}
public void doMore() {
System.out.println("top of the stack");
}
}
class ThreadTester {
public static void main(String[] args) {
Runnable threadJob = new MyRunnable();
Thread myThread = new Thread(threadJob);
myThread.start();
System.out.println("back in pain");
}
}
我无法理解 Runnable threadJob = new MyRunnable();
行。接口在不允许时如何被实例化。为什么不能像 MyRunnable threadJob = new MyRunnable();
这样的行。我的意思是 MyRunnable class 通过了 Runnable 接口的 IS-A 测试,所以作者为什么选择前一个语句。那是我在这里缺少的东西吗?请帮我解释一下。
Now we know an interface can't be instantiated directly.
您没有直接实例化 Runnable
接口。
希望您同意以下内容应该有效:
MyRunnable threadJob = new MyRunnable();
Runnable runnable = threadJob; // since threadJob is a Runnable
那为什么那条线不起作用?
当我们说你不能直接实例化一个接口,意思是你不能写
Runnable runnable = new Runnable();
这是唯一不起作用的东西。
在 OOP 中称为多态性。
它说你可以从 classB
实例化(假设 ClassB
是 ClassA
的子 class)用 ClassA
类型定义变量,然后从 ClassB
并将其分配给该变量。
例如在 java 中对象 class 是任何 classes 的根所以你可以像下面那样做:
Object x = new YourClass();
或者如果例如你的 class implements
InterfaceA
你可以像这里那样做:
InterfaceA x = new YourClass();