android-java同步方法和异步方法

接口

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() {
            @Override
            public 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() {
            @Override
            public void reverse(String dst) {
                System.out.println("ResultListener reverse = " + dst);
            }
        }, new Result() {
            @Override
            void reverse(String dst) {
                System.out.println("Result reverse = " + dst);
            }
        });
    }
}

运行结果

猜你喜欢

转载自blog.csdn.net/mozushixin_1/article/details/129030923
今日推荐