由Java中List和ArrayList 引发的思考,什么是面向接口编程?

已经知道的内容如下:
  1. 什么是构造函数?
    • Java 构造函数,也叫构造方法,是Java 类中的一种特殊方法,方法名与类名相同,一般用来初始化成员变量,当要生成一个类的对象(实例)的时候就会调用构造函数,如果类中没有显示声明类的构造方法,Java 会自动生成一个默认的不带参数的空构造函数。(接口类和抽象类没有构造函数)
  2. 什么是接口?
  • 接口是功能的集合,同样可以看做是一种数据类型,是一种特殊的抽象类。接口中的方法也全部都是抽象的,直接new 接口来调用是没有意义的,Java 也不允许这样。当然接口也可以被实现,实现接口的类需要重写接口中的方法,并完成具体的逻辑(是否体现多态?)
  • 接口中成员的特点:
    • 接口中定义变量,但变量必须有固定的修饰符修饰--public static final,所以接口中的变量也称为常量(需要和enmu做对比),其值不能改变
    • 接口中定义方法 ,同样也有固定的修饰符--public abstract
    • 接口不能创建对象
    • 子类必须覆盖接口中所有抽象方法(实现接口方法),才可以实例化,子类也可以有自己的方法,但是通过接口指向创建的实例不能调用子类的方法,这也是多态的缺点,无法直接访问子类特有的成员及方法
  • 接口的思想:方便后期维护,只需要关心接口中的方法即可。集合体系中大量使用了接口
  • 接口的优点:①类与接口的关系,实现关系,而且是多实现,打破了一个类只能继承一个父类的限制;②对外提供规则③降低了程序的耦合性(可以实现模块化开发,每个人实现自己的模块,提高开发效率)
  • 接口和抽象类的区别:详见笔记 深入理解abstract class和interface
 
回到正题来
  1. List 是一个接口,而接口不能实例化(没有构造函数),而ArrayList是List 接口的一个实现类。 我们可以像下面那样为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。
List<String> list = new ArrayList<String>();
(JDK1.7 ArrayList 容量及容量扩充:初始0,添加一个Object之后为10,每次扩充为(原始容量*3/2)和(数组的长度+1)之间的较大值)
引出:这是一个面向接口编程的简单例子,也是面向对象的重要知识点。
我们在学习OOP 的时候,提出面向对象最重要的就是多态(方法重载和方法覆盖),我们都知道接口和抽象不能被实例化,但是他们可以创建一个指向自己的对象引用(为什么要指向自己,就是为了实现接口编程),他们的实现类或者子类就在充当这样的角色,这也是面向对象编程中多态的优势(不严谨,因为接口和多态的本质不在一个层级上,多态是面向对象的特征之一,而接口是一系列方法的声明,接口可以体现多态性,但是多态不一定就要用接口,简而言之,你可以再程序里用代码定义一个接口,多态只是对代码特征的一种描述,一种概念上的抽象和总结)。

猜你喜欢

转载自www.cnblogs.com/hellovoyager1/p/9120965.html