一、抽象类
1.抽象类定义格式:
abstract class 类名{
}
2.抽象类方法的格式:
修饰符 abstract 返回值类型 方法名();//没有方法体,以分号结束
抽象类中的非抽象方法,可以有方法体
3.抽象类特点
a.抽象类不一定要有抽象方法,但是抽象方法的类一定是抽象类
b.抽象类不能实例化
c.抽象类的子类特点:要么是抽象类;要么重写父类中的所有抽象方法
4.抽象类成员的特点
成员变量:可以有
成员常量:可以有
成员方法:可以有抽象方法,也可以有非抽象方法
1.非抽象方法:子类继承,提高了代码的复用性
2.抽象方法:强制要求子类做的事情(对子类的一种约束)
构造方法:有,但是抽象类无法实例化,要构造方法干什么呢?
供子类构造方法调用(子类继承父类,子类默认调用父类的无参构造方法)
二、接口
1.接口的定义:
是一种特殊的类,是一系列方法的生命,实现接口就等于扩展功能,是抽象方法的集合,一个类通过实现接口来继承接口的抽象方法。
接口可以使我们的软件具有良好的可维护性和可扩展性,所以在开发大型的项目时会经常使用
面向接口编程就是指:软件系统的整体架构是由接口构成。我们可以先设计好这些接口,然后在编写具体的实现类来实现相应的功能。
2.面向接口编程
优点:
a.接口和实现分离了,适用于团队的协作开发
b.增强了程序的可扩展性和维护性
缺点:
a.设计难了,在你没有写实现的时候,就得想好接口,接口一变,全部实现了该接口的类都要变化,这就是所谓的设计比实现难。在软件公司设计接口的人工资都较高啊!做接口设计的人员一般称为系统架构师。
3.接口定义与实现:
interface 接口名{
}
类实现接口:class 类名 implements 接口名{...}
多实现:class Zi extends Fu implements B,C{...}
4.接口特点:
a.成员方法:默认修饰符(只能是public abstract),接口中都是公共的、抽象的方法
b.成员变量:接口中没有成员变量!!!默认修饰符public static final,只能是public-->都是成员常量,因此接口没有构造方法,不能实例化
c.接口和接口中的方法都是隐式抽象的,无需abstract声明
d.实现接口的类,要么是抽象类,要么重写接口中的所有抽象方法
!!!注意:
1. Abstract关键字不与final关键字连用,abstract没有方法体,就是用来继承的,而final不能继承
2. Abstract关键字不与static关键字连用,static方法 类名.方法名调用,抽象类无方法体,调用干嘛?是用来做继承的
3. Abstract关键字不与Private关键字连用,因为Private关键字不能继承
三、类、抽象类与接口的比较
类与接口的区别:
1.类描述对象的属性和方法,接口则包含类要实现的方法
2.接口不能实例化(抽象类也不能被实例化)
3.接口没有构造方法
4.接口不包含成员变量(默认修饰符public static final)-->都是成员常量,不需要构造方法进行初始化,因此接口没有构造函数,不能实例化
5.类与类是单继承,接口与接口支持多继承,类与接口多实现(接口的优势)
多实现:class A extends F implements B ,C{...}
类与接口的相似:
1.接口文件保存在.java结尾的文件中,文件名必须使用接口名
2.接口的字节码文件保存在.class结尾的文件中
抽象类与接口的区别:
1. 抽象类中的非抽象方法,可以有方法体,在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,提高代码的可重用性。(抽象类的优势)接口中都是抽象方法,没有方法体
2.抽象类的成员变量可以是各种类型,接口中只能是public static final
3.接口中不能含有静态代码块和静态方法,抽象类可以
抽象类与接口的相似:
1. 接口和抽象类都不能被实例化,但接口可以被实现
2. 都能包含抽象方法
3. 代表系统的抽象层
4.子类:
要么是抽象类,要么重写所有的抽象方法(接口中全都是抽象方法)