zoukankan      html  css  js  c++  java
  • 封装、继承、多态

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

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

  • 相关阅读:
    HDU----(4291)A Short problem(快速矩阵幂)
    HDU----(2157)How many ways??(快速矩阵幂)
    hdu---(2604)Queuing(矩阵快速幂)
    hdu---(5038)Grade(胡搞)
    齐次方程到矩阵(番外篇)
    uva--1339
    hdu----(5023)A Corrupt Mayor's Performance Art(线段树区间更新以及区间查询)
    hdu----(2848)Repository(trie树变形)
    hdu---(1800)Flying to the Mars(trie树)
    hdu----(1075)What Are You Talking About(trie之查找)
  • 原文地址:https://www.cnblogs.com/gabin/p/3990197.html
Copyright © 2011-2022 走看看