一.抽象类的概述
我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须为抽象类。
二.抽象类的特点
- 抽象类和抽象方法(只有方法名,没有方法体)必须用abstract关键字修饰
- 抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
- 抽象类不能实例化,因为它不是具体的。
- 抽象类有构造方法,但是不能实例化。构造方法的作用是什么呢?用于子类访问父类数据的初始化。
- 抽象的子类:1.如果不想重写抽象方法,该子类是一个抽象类;2.重写所有的抽象方法,这个时候子类是一个具体的类。
- 抽象类的实例化是靠具体的子类实现的,是多态的方式。eg. Animal a = new Dog();
- 抽象方法的权限修饰符必须为public
三.抽象类的成员特点
- 成员变量:既可以是变量,也可以为常量
- 构造方法:用于子类访问父类数据的初始化
- 成员方法:既可以是抽象的,也可以是非抽象的
抽象类的成员方法特点:
- 抽象方法:强制要求子类做的事情
- 非抽象方法:子类继承的事情,提高代码的重用性
四.抽象类不能和下面的关键字共存
- private 冲突,非法的修饰符组合:abstract 和 private
- final 冲突,非法的修饰符组合
- static 无意义
五.接口的特点:
- 接口用关键字interface表示:interface 接口名 { }
- 类实现接口用implements表示:class 类名 implements 接口名{ }
- 接口不能实例化,但是可以按照多态的方式来实例化
- 接口是一种特殊的抽象类
- 接口的子类
- 可以是抽象类,但是意义不大
- 可以是具体类,要重写接口中的所有抽象方法(推荐方法)
由此可见:
- 具体类多态(几乎没有)
- 抽象类多态(常用)
- 接口多态(最常用)
六.接口成员特点
成员变量:只能是常量,并且是静态的。
默认修饰符:public static final
构造方法:接口没有构造方法。
成员方法:只能是抽象方法。
默认修饰符:public abstract
七.
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
八.抽象类和接口的区别:
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类: 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口: 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。