首先,人应该有哪些基本特征:
1.有四肢 2.有大脑 3.有器官 4.有思想 我们就有了第一个模型,这就是抽象。(非常模糊、笼统的一个概念)
其次,我和西方上帝是好友,我想我的这个想法能够提供给他用,但是我不想让他知道里面细节是怎么捏出来的,用的什么材料,他也不用考虑那么多,只要告诉我他要捏什么样的人就可以了。这就是封装。(就像插件或组件一样,不用知道其内部实现原理,只需要知道怎么用就行了)
然后,我之后创造的人都以刚才的模型做为模板,我创造的人都有我模型的特征 这就是继承。(子对象继承父对象的方法或属性)
最后,我觉得为了让人更丰富多彩,暗合阴阳之原理,可以根据模型进行删减,某些人上半身器官多突起那么一丢丢,下面少那么一丢丢。某些人,下半身多突起那么一丢丢。这就是多态。(相同的逻辑在不同的场景中表现出不同的行为)
面向对象编程强调抽象、封装、继承、多态
抽象:我们在定义一个抽象类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象。你可以这样来想,抽象就是一个类的最基础的东西,比方说人,他的抽象类可能就是都从母体出来,有皮肤。但具体到你是黑人,白人,还得黑人类,白人类来说明 。
封装:就是将类的属性包装起来,不让外界轻易的知道他的内部实现。只提供给你对外的接口让你来调用。好处可以增强模块的独立性。如设置属性或方法的访问权限(private、protected、public、默认)。
继承:就是从父类把它的有用的东西拿过来自己用,不用在自己去实现了,像母亲会把双眼皮传给女儿,不用她自己去割了 。
多态:一个对象变量可以指向多种实际类型的现象。一个人,在不同场合下,有不同的身份,不同的状态。比如在家里,你是父母的孩子;在学校,你就是学生;在公司,你就是老板的职员。再比如在接口总定义一个run()方法,是什么在跑,汽车还是马?通过不同类的实现来表示相似的逻辑。
顺便说一下重载和重写(覆盖)的区别:
重载:相同的方法名,不同的实现机制(通过传入不同个数或类型的参数)。当程序运行过程中自己去判断到底该调用谁。比方说打人,那么多人,当你打起群架来,该打谁就打谁,事前你也不知道。
重写:从父类继承而来的方法不能满足需要的情况下,可以将此方法的逻辑在子类中重新实现。我们最常用的就是重写toString()方法了。