"[图片] 最近突然想到一个问题:Runnable 是如何允许我自定义执行内容而进行多线程处理的? 首先看使用 Runnable 创建多线程的方法: Runnable runnable = new Runnable() { @Override public void run() { System.out.println( .."

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

6.jpg

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

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello~");
            }
        };
        Thread thread = new Thread(runnable);
        thread.run();

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

package java.lang;
/*
 * @author  Arthur van Hoff
 * @see     java.lang.Thread
 * @see     java.util.concurrent.Callable
 * @since   JDK1.0
*/
public interface Runnable {
  public abstract void run();
}

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

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

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

TestIF.java

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

public interface TestIF {
    String str();
}

Main.java

public class Main {
    public static void main(String[] args) {
        // 创建一个 TestIF 接口实例并返回
        TestIF testIF = IF();
        // 传递给另一个方法并输出
        PrintIF(testIF);
    }

    public static TestIF IF() {
        TestIF testIF = new TestIF() {
            @Override
            public String str() {
                return "SUCCESSFUL!";
            }
        };
        return testIF;
    }

    public static void PrintIF(TestIF testIF) {
        System.out.println("Has received:" + testIF.str());
    }
}

输出结果

Has received: SUCCESSFUL!

总结

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

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2152 引用 • 7246 回帖 • 1053 关注
  • 代码
    82 引用 • 392 回帖
感谢    关注    收藏    赞同    反对    举报    分享
7 回帖    
请输入回帖内容...
  • jiany      

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

    2 回复 
    感谢    赞同    反对    举报    分享       回复
  • AdlerED            

    感谢。已引用说明

    1 回复 
    感谢    赞同    反对    举报    分享       回复
  • kafuly          

    大神,那你很厉害哟

    1 回复 
    感谢    赞同    反对    举报    分享       回复
  • gaoyangwolf 1 感谢        

    大神。总结的很到位!

    感谢    赞同    反对    举报    分享       回复
  • jiany            

    你可以买本 码出高效 看一下 里面介绍的很详细

    1 回复 
    感谢    赞同    反对    举报    分享       回复
  • jiany 1 感谢              

    还是大佬厉害

    感谢    赞同    反对    举报    分享       回复
  • AdlerED            

    好的。我会看看

    感谢    赞同    反对    举报    分享       回复
请输入回帖内容...