【90%的正规代码】在以后所有你进行的项目开发过程之中,绝对不要出现一个类去继承一个已经实现好的类,而只能够继承抽象类和接口。
对象多态性的核心本质在于方法的覆写上,那么如果说现在子类没有去进行指定方法的覆写,这样的操作就有些不合要求了。所以如果要对子类的方法进行一些强制的要求就必须采用抽象类来解决。
一. 抽象类基本概念
抽象类只是在普通类的基础上扩充了一些抽象方法而已。所谓的抽象方法指的是只是声明而未实现(没有方法体)的方法,所有的抽象方法要求使用abstract关键字来进行定义,并且抽象方法所在的类也一定要使用abstract定义类,表示抽象类。
现在可以发现抽象类就是比普通类多了一些抽象方法而已。
抽象类中包含抽象方法,而抽象方法与普通方法的最大区别在于其没有方法体,即:不知道具体的实现,而如果现在产生了实例化对象,则意味着可以调用类中的所有操作。
对于抽象类的使用原则:
●所有的抽象类必须要有子类;
●抽象类的子类(不是抽象类)必须覆写抽象类中的全部抽象方法;
|- 方法覆写一定要考虑到权限问题:抽象方法可以使用任意权限,要求权限尽量都用public;
●抽象类的对象可以通过对象多态性,利用子类为其实例化。
二. 抽象类使用限制
1. 抽象类只是比普通类多了一些抽象方法的定义而已,所以在抽象类之中依然允许提供有构造方法,并且子类也会遵守对象的实例化流程。实例化子类对象前一定要先去调用父类的构造方法。
对象的实例化操作实际上需要以下几个核心步骤:
①进行类的加载;
②进行类对象空间的开辟;
③进行类对象中属性的初始化(构造方法)。
结论:如果构造方法没有执行,那么对象中的属性一定都是其对应数据类型的默认值。
2. 抽象类中允许不定义任何的抽象方法,但是此时抽象类对象依然无法进行实例化处理。
3. 抽象类一定不能够使用final进行声明,因为使用final定义的类不能够有子类,而抽象类必须有子类。抽象方法不能够使用private进行定义,因为抽象方法必须被覆写。
4. 抽象类也分为内部抽象类和外部抽象类,内部抽象类中可以使用static定义,描述为外部抽象类。
如果外部抽象类使用了static那么就是语法错误,可内部抽象类允许使用static。
三. 模板设计模式
抽象类的最大特点在于强制规定了子类的实现结构,除了这一特点之外,抽象类更多的情况下还可以起到一个模板的作用。
抽象类在实际的使用过程之中会定义一些固化的模式。
但是每种指令的具体实现由子类负责完成,父类只做了方法的约定。
最具代表性的就是后面要学习的servlet。
注意:
1. 抽象类虽然定义了子类必须要做的事情,但是抽象类依然会存在有单继承局限。
2. 抽象类的使用必须要通过子类进行对象实例化的处理。