封装、继承、多态

得益于一个面试官的问题,当时是这么问我怎么理解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.");
    }
}

 

值得注意的是重载通常是类自身方法之间的关系,而重写涉及到类与类之间的关系。前者是运行时绑定,后者是编译时绑定。

 

posted @ 2014-09-24 11:07  gabin  阅读(246)  评论(0编辑  收藏  举报