接口

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。在java中,接口用关键字interface来表示,书写方法为:

public interface Listener{void result();
}

而后面跟的接口名称,按照习惯以XX_Listener,也就是监听器的意思。

在Java语言规范中,一个方法的特征仅包括方法的名字、参数的数目和类型,而不包括方法的返回类型、参数名以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

抽象类

Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。

在抽象类中可以包含一般方法和抽象方法。抽象方法的定义与一般方法不同,抽象方法在方法头后直接跟分号,而一般方法含有以大括号框住的方法体。所有的抽象方法必须存在于抽象类中。

区别

  1. Java抽象类可以提供某些方法的部分实现,而Java接口不可以;
  2. 向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点;
  3. 一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性;

    任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

使用

在同步方法中,可以在方法体内按顺序执行代码得到结果并通过return返回,这类方法一般不用于计算,只是算力简单的代码;

如果算力复杂,需要消耗比较长的时间,则用异步方法,不直接返回结果,而且等待计算完成之后,回调结果。

public class Demo {public static String reverseStrSync(String src) {StringBuilder temp = new StringBuilder();temp.append(src);temp.reverse();return temp.toString();}public static void reverseStrASync(String src, ResultListener resultListener, Result result) {new Thread(new Runnable() {@Overridepublic void run() {StringBuilder temp = new StringBuilder();temp.append(src);temp.reverse();if (resultListener != null) {resultListener.reverse(temp.toString());}if (result != null) {result.reverse(temp.toString());result.reverse2(temp.toString());}}}).start();}public interface ResultListener {void reverse(String dst);}public abstract static class Result {abstract void reverse(String dst);void reverse2(String dst) {System.out.println("reverse2 = " + dst);}}public static void main(String[] args) {reverseStrASync("abcd", new ResultListener() {@Overridepublic void reverse(String dst) {System.out.println("ResultListener reverse = " + dst);}}, new Result() {@Overridevoid reverse(String dst) {System.out.println("Result reverse = " + dst);}});}
}

运行结果

android-java同步方法和异步方法相关推荐

  1. java同步调用异步方法_关于同步方法里面调用异步方法的探究

    ##前言 我在写代码的时候(.net core)有时候会碰到void方法里,调用async方法并且Wait,而且我还看到别人这么写了.而且我这么写的时候,编译器没有提示任何警告.但是看了dudu的文章 ...

  2. Android java传递string类型数据给C

    本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...

  3. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题

    android  java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题 jav ...

  4. android 5秒后进入,Android/Java:如何在5秒后停止下载?

    我正在使用AsyncTask来下载文件,目的是测量连接的下载速度.我想在5秒后停止下载,以便我可以检查下载的总字节数并计算速度.下面是我使用(这被放置在doInBackground()方法中)的代码: ...

  5. js端调用android端同步方法,JS怎样调用Android本地原生方法

    1.设置webview webSettings.setJavaScriptEnabled(true);//设置js可用 MJavascriptInterface mJavascriptInterfac ...

  6. android java.lang.IllegalArgumentException: The observer is null.异常解决

    android java.lang.IllegalArgumentException: The observer is null.异常解决 参考文章: (1)android java.lang.Ill ...

  7. Android+Java中使用Aes对称加密的工具类与使用

    场景 Android+Java中使用RSA加密实现接口调用时的校验功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11146 ...

  8. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  9. adt eclipse java1.8,android java开发 第一天 之熟习eclipse adt

    android java开发 第一天 之熟悉eclipse adt ADT:eclipse中的开发android软件的插件(android development tools)功能:管理android ...

  10. Android Java包

    下面简短介绍一下Android SDK中重要的包. android.app:实现Android的应用程序模型.主要的类包括Application(表示开始和结束语义),以及众多与Activity相关的 ...

最新文章

  1. Android自定义View详解,知乎上转疯了!
  2. 在pcduino上实现图像识别的程序
  3. 我只是一只碌碌无为的工蚁 : (
  4. gravity 时序图绘制,改
  5. bootstrap获取弹框数据_Bootstrap模态弹出框的实例教程
  6. 原生的html组件,如何创建HTML5与原生UI组件混合的移动应用程序
  7. python路径相关小问题
  8. 计算机关机后自行启动,Win7官方旗舰版系统电脑关机后自动开机的解决办法
  9. a-select 下拉框样式修改
  10. vs2010英文版变中文版
  11. 博士“申请考核制”经验
  12. 【git】基于github开源平台的项目进行二次开发
  13. Android8.1 修改音量级别和默认音量
  14. 【UI设计No9】VI
  15. canvas下雪效果(原生js)
  16. matplotlib之pyplot模块——填充多边形(fill)
  17. 内存管理(15)——UI(20)——DeleteObject
  18. vscode调出大纲
  19. 微信小程序实现录音及本地录音播放功能
  20. 【附源码】计算机毕业设计java幼儿园管理系统设计与实现

热门文章

  1. PDF文件详细数据结构
  2. mesh路由器哪个品牌好(无线mesh组网推荐路由器)
  3. android imagebutton 动画,Android:单击时获取动态生成的ImageButton的ID
  4. 机器学习实验2 / 逻辑回归
  5. inode满了postfix/postdrop: warning: mail_queue_enter: create file maildrop : No space left on device
  6. 0-1背包问题C语言
  7. 如何构造平衡二叉树(AVL树)(LL、LR、RL、RR)
  8. 数据集的创建(digits)
  9. Diverse Embedding Expansion Network and Low-Light Cross-Modality Benchmark for V-I Re-ID:如何有效利用生成嵌入?
  10. VUE3使用JSON编辑器