抽象类的使用及其注意事项
概述
加深对抽象类概念的理解及熟悉该类的使用
1.什么是抽象类
通俗的说,不是具体的东西,都是抽象的,那么在java中,可以理解为不是具体的类,就是抽象类。对抽象类的理解,需要结合抽象类的特点及其使用方法。
2.为什么要有抽象类
在学习完面向对象的继承之后,我们都遇到过一个问题,对于子类继承的父类方法,如果子类有特殊的实现需求,那么,无论父类方法实现得如何,子类都需要对继承的方法进行重写(复写),那么,父类的该方法,可不可以不进行实现呢?
答案是可以的,所以就有了抽象类。抽象类的出现,就是为了让子类继承的,从而更好的实现子类功能。
3.抽象类的特点
1)抽象类使用 abstract 关键字修饰;
abstract class Abs类名{
}
2)有一个抽象方法的类一定是抽象类;
3)一个抽象类可以没有抽象方法;
4)抽象类中可以没有抽象方法,其存在的意义,是为了防止外界创建对象。防止外界创建对象,有利于减少在调用方法时内存占用(无需创建对象)(比如调用静态方法时无需创建对象)。各类型方法类均有防止外界创建对象的方式。
防止外界创建对象的方式有: a.构造方法私有化 b.抽象类 c.接口 d.内部类
5)抽象类不能够实例化,这里说的实例化是通过new 加构造方法实例 ;
如果需要"实例化"抽象类,怎么做 --> 利用多态,父类引用指向子类对象。
7)抽象类也可以创建匿名内部类对象匿名内部类的格式: new 类名() {重写方法}
8)抽象类的子类特点:
a.如果一个子类想要继承抽象类,就必须实现抽象类中的所有的抽象方法
b.如果一个子类不想要实现抽象类中的抽象方法,子类必须升级为抽象类
9)抽象类和普通类的区别:
抽象类中是否有 常量 成员变量 成员方法 构造方法 静态方法?
有的话又有什么意义呢?
成员变量 成员方法 构造方法: 提供给子类继承。
常量 静态方法: 直接类名调用。
构造方法:帮助子类初始化 父类继承下去的成员,减少子类构造方法的代码量。
10)private、final、native、static、protected、public ,哪些可以修饰抽象方法,哪些不可以,说出为什么?
private、final、native修饰后无法继承,与抽象方法冲突。
static 修饰后,方法需要具体的实现, 抽象方法无意义
protected public 和 抽象方法可以共存
11)抽象类的本质就是一个彻头彻尾的服务类,所有的成员都给子类使用,自己不能实例化,燃烧自己,服务子类
抽象类可以作为一个模板使用。