面向对象---抽象

Posted mhy666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象---抽象相关的知识,希望对你有一定的参考价值。

抽象

一、概述

1、 为什么需要抽象

有的时候,多个子类的方法声明相同、方法体不同;这个时候也可以抽取方法声明,不抽取方法体;从而让开发中知道该子类有这个特性,便于维护;

 

2、抽象类意义

(1)封装子类共有的属性和行为-------------代码复用

(2)为所有子类提供一种统一的类型---------向上造型

(3)为所有子类提供统一的方法入口 :每个子类的实现不同,但入口是一致的,入口就是抽象方法;

 

二、抽象类

1、        概述

当定义了抽象方法的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。

2、        定义的格式:

abstract class 类名 {

}

 

3、        特征

抽象类和方法:抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。抽象类中可以不定义抽象方法;

对象:抽象类不可以直接创建对象,原因:调用抽象方法没有意义。

子类:只有重写了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

 

三、抽象方法

1、 概述

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

2、 定义格式

只有方法的定义,没有方法具体的实现(连{}都没有)

 

public abstract 返回值类型 方法名(参数);

 

四、抽象关键字

1、抽象关键字abstract不可以和哪些关键字共存?  

l  1、private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。

l  2、final,暂时不关注,后面学

l  3、static,暂时不关注,后面学

 

 

五、面试题

1, 抽象类中是否可以没有抽象方法?如果可以,那么,该类还定义成抽象类有意义吗?为什么?

可以没有抽象方法,有意义,不会让其他人直接创建该类对象

 

以上是关于面向对象---抽象的主要内容,如果未能解决你的问题,请参考以下文章

重新认识面向对象

重新认识面向对象

系统构架风格---数据抽象与面向对象风格

面向对象程序设计具都有哪些特性呢?

python抽象篇:面向对象

TypeScript,面向对象,类、构造函数、继承、抽象类、接口和封装