学习资料:

参考视频

参考demo


概述:

  1. 接口和抽象类在做入参和返回值时使用方法基本是一致的,接口和抽象类的抽象方法必须实现,但是抽象类的非抽象方法可以不重写;见demo
  2. 接口或抽象类做入参时,调用该方法时需要以匿名内部类的形式或者实现类的形式将其实例化;见例子①
  3. 接口或抽象类做返回值时,需要以匿名内部类形式或实现类形式进行实例化返回;见例子②

实例讲解:

  • 以接口进行讲解,抽象方法的使用方法同接口,见demo,以下也是截取自demo中的代码片段
  • 例子①:接口做入参

接口代码

//以接口  作为入参或返回值
public interface InregerDemo {

    public void param1();

    public Integer param2(Integer var1,String var2);

}

 接口实现类代码

package com.example.demo.Abstract_Interfance.interfanceTest;

public class InregerDemoClass implements InregerDemo {


    @Override
    public void param1() {
        System.out.println("InregerDemo实现类param1  方法");
    }

    @Override
    public Integer param2(Integer var1, String var2) {
        System.out.println("InregerDemo实现类param2  方法 入参为:"+var1+ "---"+ var2+"返回值为 "+(var1+var2.length()));

        return var1+var2.length();
    }
}

 接口入参的方法

//用接口做入参和出参的类
public class InterfanceEntity {
    //用接口做形参
    //这个在调用的时候  也必须实例化这个接口当参数  可以是匿名内部类的形式  也可以是  实现类的形式
    public  void AsParam(InregerDemo id){
        id.param2(1,"ss");
        id.param1();
    }
}

 调用接口入参方法(以匿名内部类的形式或者实现类的形式进行调用)

public static void main(String[] args) {
        InterfanceEntity entity = new InterfanceEntity();
        //匿名内部类形式 做入参
        System.out.println("===接口做入参,以匿名内部类方式实现======");
        entity.AsParam(new InregerDemo() {
            @Override
            public void param1() {
                System.out.println("param1");
            }

            @Override
            public Integer param2(Integer var1, String var2) {
                System.out.println("param2 var1:"+var1+"var2:"+var2);
                return null;
            }
        });

        System.out.println("===接口做入参,以实现类的方式实现====");
        entity.AsParam(new InregerDemoClass());

    }
  • 例子②:接口做返回值

承接上述的接口和实现类,接口做返回值需要在方法声明时就以匿名内部类或者实现类的形式,进行实例化

接口做返回值

package com.example.demo.Abstract_Interfance.interfanceTest;

//用接口做入参和出参的类
public class InterfanceEntity {


    //用接口做返回值  一定要返回接口的实例
    //以匿名内部类的方式
    public InregerDemo AsReturn1(){
        return new InregerDemo(){
            @Override
            public void param1() {
                System.out.println("接口做返回值  匿名内部类形式  param1");
            }

            @Override
            public Integer param2(Integer var1, String var2) {

                System.out.println("接口做返回值  匿名内部类形式  param2  入参 var1 :"+var1+"=var2:="+var2+"返回值:"+(var1+var2.length()));

                return var1+var2.length();
            }
        };
    }


    //用接口做返回值  以实体类的形式返回
    public InregerDemo AsReturn2(){
        return new InregerDemoClass();
    }
}

 调用该接口做返回值

public static void main(String[] args) {

        System.out.println("===接口做返回值,以匿名内部类的方式实现===");
        entity.AsReturn1().param1();
        entity.AsReturn1().param2(25,"25");

        System.out.println("===接口做返回值,以实现类的方式实现===");
        entity.AsReturn2().param1();
        entity.AsReturn2().param2(35,"35");


    }