一个实例理解Java的接口(interface)用处与用法

最近突然想到一个问题:Runnable是如何允许我自定义执行内容而进行多线程处理的?
首先看使用Runnable创建多线程的方法:

1 Runnable runnable = new Runnable() { 2 @Override 3 public void run() { 4 System.out.println("hello~"); 5 } 6 }; 7 Thread thread = new Thread(runnable); 8 thread.run();

我们可以看到首先创建了一个Runnable接口实例,Runnable接口源代码如下:

1package java.lang; 2/* 3 * @author Arthur van Hoff 4 * @see java.lang.Thread 5 * @see java.util.concurrent.Callable 6 * @since JDK1.0 7*/ 8public interface Runnable { 9 public abstract void run(); 10}

可以看到的是在Runnable接口中只有一个run方法待用户定义。
当我们重写Runnable的run方法后,我们就有了一个完整的方法,然后通过Thread传入接口并使用run();方法运行。

所以Thread包括了多线程执行的所有方法,而Runnable仅提供了一个供用户重写的接口。

回过头来,我们创建一个实例:

  • Main.java
  • TestIF.java

TestIF.java

该接口仅负责存储一个String字符串:

1public interface TestIF { 2 String str(); 3}

Main.java

1public class Main { 2 public static void main(String[] args) { 3 //创建一个TestIF接口实例并返回 4 TestIF testIF = IF(); 5 //传递给另一个方法并输出 6 PrintIF(testIF); 7 } 8 9 public static TestIF IF() { 10 TestIF testIF = new TestIF() { 11 @Override 12 public String str() { 13 return "SUCCESSFUL!"; 14 } 15 }; 16 return testIF; 17 } 18 19 public static void PrintIF(TestIF testIF) { 20 System.out.println("Has received: " + testIF.str()); 21 } 22}

输出结果

1Has received: SUCCESSFUL!

总结

来自jiany的订正:
抽象是模板,接口是契约。接口规定了这个类可以实现的功能。

# Java  Coding 

如转载请在文章尾部添加

原作者来自 adlered 个人技术博客:https://www.stackoverflow.wiki/

评论

取消