• 朝阳消防联合快递行业开展消防安全宣传培训系列活动 2019-04-05
  • 期待已久的桃花运 竟然可以穿出来?! ——凤凰网房产广州 2019-04-05
  • 中关村雍和航星科技园,北京中关村雍和航星科技园 2019-03-22
  • 潇湘玉竹版主辛苦了! 2019-02-13
  • 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-02-13
  • 工信部:鼓励婴幼儿配方乳企质量安全追溯体系建设 2018-12-30
  • "[图片] 最近突然想到一个问题:Runnable 是如何允许我自定义执行内容而进行多线程处理的? 首先看使用 Runnable 创建多线程的方法: Runnable runnable = new Runnable() { @Override public void run() { System.out.println( .."

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

    天中图库好运财新福 www.zpvv.net 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 技术具有卓越的通用性、高效性、平台移植性和安全性。

      2169 引用 ? 7359 回帖 ? 1040 关注
    • 代码
      109 引用 ? 396 回帖 ? 1 关注
    感谢    关注    收藏    赞同    反对    举报    分享
    7 回帖    
    请输入回帖内容...
    • jiany ?      

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

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

      感谢。已引用说明

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

      大神,那你很厉害哟

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

      大神。总结的很到位!

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

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

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

      还是大佬厉害

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

      好的。我会看看

      感谢    赞同    反对    举报    分享       评论    回复
    请输入回帖内容...
  • 朝阳消防联合快递行业开展消防安全宣传培训系列活动 2019-04-05
  • 期待已久的桃花运 竟然可以穿出来?! ——凤凰网房产广州 2019-04-05
  • 中关村雍和航星科技园,北京中关村雍和航星科技园 2019-03-22
  • 潇湘玉竹版主辛苦了! 2019-02-13
  • 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-02-13
  • 工信部:鼓励婴幼儿配方乳企质量安全追溯体系建设 2018-12-30