面向对象之面向对象思想

前言 二胖在学习完了一些Java语言基础知识之后开始学习面向对象思想,二胖知道这一思想对后续的学习很重要并且二胖之前接触过C语言,他知道C语言是面向过程的,那

前言

二胖在学习完了一些Java语言基础知识之后开始学习面向对象思想,二胖知道这一思想对后续的学习很重要并且二胖之前接触过C语言,他知道C语言是面向过程的,那这面向过程思想与面向对象思想之间有啥区别呢,这两者又是怎样进行演变的呢?二胖决定与班里的学霸小桂交流交流。

正文

以下为二胖与小桂之间的对话:

  • 二胖:小桂小桂,今天老师讲的面向对象思想你是咋理解的啊?我感觉这还是挺符合人们的思维习惯的。

  • 小桂:你说得对。关于我咋理解这个,我先问你个脑筋急转弯吧。

  • 二胖:你问,我肯定能知道!

  • 小桂:把大象放进冰箱需要几步?把长颈鹿放进冰箱又需要几步呢?

  • 二胖:哈哈哈哈,这我知道。第一个需要三步:打开冰箱,把大象放进冰箱,关闭冰箱;第二个要多一步,因为需要先把大象拿出来嘛。

  • 小桂:哈哈哈,二胖,看来你还真是见多识广。

  • 二胖:谢谢夸奖啦,不过这跟我问你的问题有啥联系呢?

  • 小桂:当然有啦,你想想看你思考这个问题的过程,是不是按顺序一个步骤一个步骤地执行下去

  • 二胖:当然是啊!

  • 小桂:其实这就是所谓的面向过程思想啦,它强调的就是这个过程

  • 二胖:原来是这样的。听你这么说的话,我好想有点理解了。

  • 小桂:说来听听。

  • 二胖:你看,随着现在生活条件水平的逐步提高,人们对效率的要求也越来越高了,以前注重过程的思想慢慢地也就转变为注重对象啦,具体来说就是寻找符合自己需求的对象嘛!

  • 小桂:哦?此话怎讲呢?

  • 二胖:举个例子:你看假设你想买个手机,按以前的思考方式,那肯定就是先上网做攻略嘛、再去实体店看、接着还要砍价,最后才能买到,太麻烦了,效率也很低。但是如果按照现在这种思考方式的话,你直接找个懂手机的朋友帮你去买就行了嘛。是不是简单多啦!你一下就从过程中的执行者变成了对象的指挥者啦!

  • 小桂:二胖你说得真好!这可能就是老师说的"有对象使用对象,没对象造对象再使用对象"的含义吧。

  • 二胖:是这样的。不过小桂我还有个疑惑。

  • 小桂:你说。

  • 二胖:我们之前写Hello World程序时,里面有个类,那这类和这面向对象的对象有啥联系吗?

  • 小桂:二胖你观察得可真仔细,这两者当然有关系啦,Java语言其实就是通过类来描述现实生活中的事物的,具体来说是通过属性和方法进行描述的。举个例子:你看大街上的汽车,它们虽然都是汽车但是轮胎数和车的颜色都不一样。

  • 二胖:是的!我明白了,大街上的这些汽车其实是"汽车"这类事物的实例。

  • 小桂:你说得对,并且这个实例可以通过new这个关键字创建,你看下面这段代码:


class Car {
    int num;
    String color;

    void run() {
        System.out.println(num + "..." + color);
    }
}

class CarDemo {
    public static void main(String[] args) {
        // 在计算机中通过new关键字创建一个Car的实例
        Car c = new Car();   // c就是一个类类型的引用变量并且它指向了该类的对象(实例)
        c.num = 4;
        c.color = "red";

        c.run();   // 要使用对象中的内容可以通过"对象.成员"的形式来完成调用
    }
}

这个num和color其实就是Car这个类具有的属性,这个run呢其实就是Car这个类拥有的方法,怎么run当然是Car最清楚嘛,这需要发动机、变速箱、传动系统的协同合作才可以。人们只不过是调用这个方法就可以了。其实这里的属性和方法还有一个名称那就是成员

  • 二胖:哎!小桂,Java和C++中都有一种变量叫局部变量,那这成员变量与局部变量之间有啥区别

  • 小桂:啊!这个。你听我给你总结总结。


1、从定义位置看:
成员变量定义在类中,整个类都可以访问;
而局部变量定义在函数、语句、局部代码块中,只能在所属的区域中访问。你看,"局部"嘛。

2、从存储位置看:
成员变量存在于堆内存的对象中;
而局部变量存在于栈内存的方法中。

3、从生存周期看:
成员变量随着对象的创建而存在,随着对象的消失而消失;
而局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

4、从初始化看:
成员变量都有默认初始化值;
而局部变量没有默认初始化值。

  • 二胖:原来是这样,我可得好好领悟领悟。

  • 小桂:加油!

  • 二胖:好的。不过今天老师说在Java世界里,万物皆对象。这句话是咋理解的啊?

  • 小桂:我们现在理解这个还是有点困难,毕竟对面向对象思想的理解还是需要逐步深化的,加油吧。

  • 二胖:好,一起加油!