在第一周就有一个Shape类的例子。这个类有很多的子类,每一个子类也实现了父类的方法。实际上父类Shape只是一个抽象的概念而并没有实际的意义。如果请你画一个圆,你知道该怎么画;
如果请你画一个矩形,你也知道该怎么画。但是如果我说:“请画一个形状,句号”。你该怎么画?
同样,我们可以定义Circle类和Rectangle 类的 draw() , 但是Shape 类的draw() 呢?
Shape 类表达的是一种概念,一种共同属性的抽象集合,我们并不希望任何Shape类的对象会被创建出来。那么,我们就应该把这个Shape类定义为抽象的。我们用 abstract 关键字来定义抽象类。
抽象类的作用仅仅是表达接口,而不是具体的实现细节。抽象类中可以存在抽象方法。抽象方法也是使用 abstract 关键字来修饰。抽象的方法是不完全的,它只是一个方法签名而完全没有方法体。
如果一个类有了一个抽象的方法,这个类就必须声明为抽象类。如果父类是抽象类,那么子类必须覆盖所有在父类中的抽象方法,否则子类也成为一个抽象类。一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的。设计这样的抽象类主要是为了防止制造它的对象出来。
抽象函数/ 抽象类
●抽象函数 ———— 表达概念而无法实现具体代码的函数
●抽象类 ------------表达概念而无法构造出实体的类
●带有abstract 修饰符的函数
●有抽象函数的类一定是抽象类
●抽象类不能制造对象
●但是可以定义变量
•任何继承了抽象类的非抽象类的对象可以付给这个变量
实现抽象函数
•继承自抽象类的子类必须覆盖父类中的抽象函数
• 否则自己称为抽象类
两种抽象
● 与具体相对
•表示一种概念而非实体
●与细节相对
•表示在一定程度上忽略细节而着眼大局