本文已参与周末学习计划,点击查看详情。
1、类、抽象类与接口
1.1 类的定义
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,是抽象的概念集合,表示一个共性的产物。例如,所有的浮点型数字都具有相同的特性和行为。类和类的实例对象,是整个面向对象中最基础的单元。
1.2 抽象类
1.2.1 抽象方法
要讲抽象类,需先了解什么是抽象方法。抽象方法是一种特殊的方法:它只有方法声明,而没有具体的实现。抽象方法使用关键字 abstract 修饰,声明格式为 abstract void fun()。抽象方法的访问权限为 public 或 protected ,缺省情况下默认为 public。
1.2.1 抽象类
包含抽象方法的类都必须使用关键字 abstract 声明为抽象类。抽象类也是一个Java类,同样可以拥有成员变量和普通成员方法。
普通类与抽象类的共同点
- 普通类和抽象类都可以用来继承,并且都遵守单继承的规范。
- 都可以拥有自己的成员变量、构造方法和普通成员方法
普通类与抽象类的不同点
- 抽象类虽然有构造方法,但不能拥有实例对象
- 一个类继承于抽象类,子类必须实现父类的抽象方法;如果子类没有实现父类的抽象方法,则子类也必须声明为抽象类
- 抽象类就是为了继承而存在的,定义了一个抽象类,却不去继承它,创建的这个抽象类就毫无意义
1.3 接口
接口(interface)是比抽象类更进一步的抽象。接口可以说是一个完全抽象的类,接口中的方法都不提供具体的实现,都是抽象方法。接口也可以含有成员变量,所有的成员变量都被隐式指定为 public static final。
接口的特性
- 接口的方法都是抽象方法,并默认为 **public static **
- 接口的成员变量都默认为 public static final
- 接口没有构造方法
- 一个类遵循某个特定的接口,使用 implement 关键字,并且一个类可以实现多个接口
1.4 抽象类与接口的区别
1.4.1 语法上的区别
- 抽象类有构造方法,接口没有构造方法
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
1.4.2 设计思想上的区别
抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。