为什么没有抽象,就没有封装继承多态

简介: 为什么没有抽象,就没有封装继承多态

关于这个问题,首先明确一下抽象是什么:抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。(摘自百度百科)。

由此得知,抽象关键在于从众多食物中抽取出共同的本质性的特征。而封装继承多态,是面向对象的三大特征,为什么没有前者就没有后者呢?

**

封装

**

封装是面向对象程序设计的第一步,它是将函数,方法等集合在一个类中,可以通过public和private定义其是公用的还是私有的,封装好的一个类可以有公有方法,也可以有私有方法,可以达到可复用的目的,也可以保持代码的私密性。我认为封装是建立在抽象基础之上的。

一个简单的例子,之前做机房收费系统的时候,很多地方涉及到了输入框,有几十个之多,有输入框就要加限制,比如手机号框里不能输入汉字字母和字符。需要输入手机号的地方可能有十几个,按照最原始的方式,为每个手机号框添加一个限制方法……功能上可以实现,但是代码太冗余了,相同的代码复制十几次甚至更多,不仅浪费了存储空间,也降低了效率。那怎么办呢?封装是个好办法?所有手机号输入框,都要有相同的限制,十几份相同的代码。既然相同,那么就将其中的逻辑抽象出来,写成一个方法,这就是封装的过程,这个方法,哪里需要,哪里调用就好了,这就避免了重复,避免了冗余。

所以这个封装的过程,就是从这十几个手机号限制方法中,抽取出一个共同的本质的特征,然后封装成一个方法。所以封装是基于封装之前的抽象。

**

继承

**

继承是面向对象的第二大特征,继承是从已有的类中派生出新的类,新的类具有现有类的属性行为,也能拓展出自己独特的属性和行为,已有类和新类可称为父类子类、基类和派生类。对象是类的实例,对象=属性+方法,类定义了对象的结构,是创建对象的模板。而为什么说继承是基于抽象的呢?

拿我们人类来说,人类就是一个类,每一个人,就是一个具体的对象,是人类的一个实例化,人的个体,作为具体的对象是存在的,而“人类”不是具体存在的,我们能找到一个人,但是不能找到一个人类。人类,只是人基于人的共同特征抽象出来的一个概念,以区别与其他物种。比如人类具有两条腿两条胳膊,能直立行走,会用语言交流的特点。如果我们能造一个新人,那么一定根据这些特点,所以类根据对象的特征抽象出来的,是对象的模板。还可以根据这个模板创建更多的对象。**

**

多态

**

多态,从字面来看,就是多种形态,这是面向对象的第三大特征。表现为一个对象变量可以指向多种实际类型的现象,同一事件发生在不同对象上,产生不同的结果,不同的对象表现出不同的状态。

好比“炒菜”这是一个具体的行为,“鱼香肉丝”是一道具体的菜。炒鱼香肉丝就是一个行为,让不同的对象(厨师),去执行这个相同行为,但是却可以有千百种风味。纵有千百种风味,但是他们在做同一件事情:炒鱼香肉丝,这则是抽象出来的共同特征。我们将这个共同特征保留,当有客人点菜,张三爱吃多放辣椒的,李四爱吃多放木耳的,让厨师去执行“炒鱼香肉丝”的行为,将客人的口味当做参数传过去,则产生了不同口味的鱼香肉丝。这就是基于抽象的多态。

相关文章
|
2月前
抽象和封装
抽象和封装
14 0
|
3月前
抽象
如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法
46 4
|
4月前
针对抽象编程与对应的好处
针对抽象编程与对应的好处
21 1
|
10月前
没有抽象就没有封装继承多态
没有抽象就没有封装继承多态
|
5月前
|
设计模式 Java 容器
设计模式之组合模式-创建层次化的对象结构
设计模式之组合模式-创建层次化的对象结构
|
7月前
|
设计模式 存储 Java
JAVA设计模式9:桥接模式,将抽象部分与实现部分分离
JAVA设计模式9:桥接模式,将抽象部分与实现部分分离
|
10月前
|
设计模式
面向对象方法-抽象
面向对象方法-抽象
|
10月前
面向对象基础-抽象
面向对象基础-抽象
36 0
|
11月前
|
设计模式 存储 安全
【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
55 0
|
12月前
|
Java
10 抽象与封装
10 抽象与封装
55 0