211接口作为方法的参数和返回值类型
思想:可以返回接口,接口虽然不能被实例化,但是接口的实现类都可以向上转型为接口。
所谓面向接口编程是指我们在编写代码时对数据参数的定义尽量写成接口,待真正实现的时候再用实际类型代替。
好处:代码的耦合性降低,在运行时我只需修改实现类类型,就可以实现不同的功能,而不必要修改接口的代码。表面上是返回的接口,其实返回的是接口的实现类。
一、接口作为方法的参数进行传递:必须传递进去一个接口的实现类对象。(跟接口一样)
例:
所谓面向接口编程是指我们在编写代码时对数据参数的定义尽量写成接口,待真正实现的时候再用实际类型代替。
好处:代码的耦合性降低,在运行时我只需修改实现类类型,就可以实现不同的功能,而不必要修改接口的代码。表面上是返回的接口,其实返回的是接口的实现类。
一、接口作为方法的参数进行传递:必须传递进去一个接口的实现类对象。(跟接口一样)
例:
//抽烟接口 public interface Smoking{ void smoking(); }
//学生类 public class Student implements Smoking { public void smoking() { System.out.println("Students are not allowed to smoke!"); } } //测试类 public class Test{ public static void main(String[] args) { Student s = new Student(); //改成多态调用:Smoking s = new Student(); smoking(s); //打印结果:Students are not allowed to smoke! } public static void smoking(Smoking s) { //接口作为参数。 s.smoking(); } }
定义方法: public static List<Integer> getEvenNum(List<Integer> list) { // 创建保存偶数的集合 ArrayList<Integer> evenList = new ArrayList<>(); // 遍历集合list,判断元素为偶数,就添加到evenList中 for (int i = 0; i < list.size(); i++) { Integer integer = list.get(i); if (integer % 2 == 0) { evenList.add(integer); } } /* 返回偶数集合 因为getEvenNum方法的返回值类型是List,而ArrayList是List的子类, 所以evenList可以返回 */ return evenList; } 调用方法: public class Test { public static void main(String[] args) { // 创建ArrayList集合,并添加数字 ArrayList<Integer> srcList = new ArrayList<>(); for (int i = 0; i < 10; i++) { srcList.add(i); } /* 获取偶数集合 因为getEvenNum方法的参数是List,而ArrayList是List的子类, 所以srcList可以传递 */ List list = getEvenNum(srcList); System.out.println(list); } }