封装、继承、多态
得益于一个面试官的问题,当时是这么问我怎么理解javascript的prototype的原型概念
当时似乎也不知道自己讲了些什么
总之,在学习开发的过程我确实很少去想过怎么和别人解释这些概念,我自己总有自己特殊的一套记忆曲线。
想想做开发的过程中总难免与人有些交流,所以还是从现在开始自己整理一下一些概念的自我理解好了,
并不拘泥于专业书籍里面的解释,主要是自己理解的一个方法。
1、封装
从字面上的意思,我理解为封闭起来,然后组装好。ok,用一个比较普通的比喻吧,就好像我们组装台式机的时候。
我们把cpu、内存条神马的各种都插好、装好之后,把整个主机用一个铁片或者外壳给装起来了,这个时候我们基本
上只留下 开启、重启这两个按钮对外开放了。
用类的方式来理解的话,即private属性我们外部无法访问,但我们可以通过public的方法来操作private的属性。
用段代码来解释吧
public class Test { // 私有属性,外部无法直接访问 ->封 private String name; // 开放2个public方法才间接操作私有属性 ->装 public String getName() { return this.name; } public void setNmae(String name) { this.name = name; } }
2、继承
对于继承这个词,大家可能更多地想到的是财产继承神马的,再加上大家身边的人大都是一个种族、一个民族的人,可能大家并不是感觉到很明显。
同样的举个现实的例子:
你见过2个中国人生出过一个黑人或者白人吗?就是说我们的肤色是继承于父辈的,老爸老妈的。当然混血的比较特殊了,或者养过猫猫狗狗的可能也知道,
纯血的毛色比较单一,通常情况下 杂毛==杂种,当然这个比喻不太好。
用代码来理解的话,大概就是这样的:
class Father { // 父类[基类] 肤色是黄色的 protected String skinColor = "yellow"; } public class PeopleOne extends Father { // 继承的默认情况下,子类的肤色也是黄色的,但是如果特殊情况 // 比如母亲是白人的情况下,也有可能变成白色 private String skinColor = "white"; }
3、多态
前面也说过了继承,理想状态下,儿子会完全继承父亲的特征。可能与真实情况相反的是,在现实中我们是父母生下的,
而不是像java那种子的单线程 -> 单性繁殖。
因此在这个基础上,或者再加行一些基因突变以及先后天的影响,我们并不完全跟父亲或者母亲相同。人类世界才会多姿多彩。
这就是我们所说的多态,也就是说多态的前提是继承,可是完全继承不是太没有意思了吗?用现实的现象来理解的话,就是相
同爸妈所生的孩子也几乎完全不同(双胞胎神马的除外)。
用代码来理解的话就有 重载 和 重写:
class SuperClass { public void doSomething() { System.out.println("I can swap."); } } public class OverLoadOrWrite extends SuperClass{ // 方法名一致,参数类型不同 -> 重载 public static int getAge(String age) { return Integer.parseInt(age); } public static int getAge(double age) { return (int)age; } // 重写父类方法 public void doSomething() { System.out.println("I can walk."); } }
值得注意的是重载通常是类自身方法之间的关系,而重写涉及到类与类之间的关系。前者是运行时绑定,后者是编译时绑定。