初学Java的时候看过一个视频,视频中的老师说过这么一段话:对于那些拥有多年开发经验的开发者来说,怎么衡量彼此之间的能力?或者说怎么进行一个能力比较?开发者的能力这是一个很难定义的问题,事实上也无法给出衡量的标准,如果真的存在这么一种标准,唯一的可能就是对面向对象的理解深度了。
刚开始入门学习的我,自然无法体会这段话的深意,但是现在回头再看这段话,确实有一定的道理。对面向对象理解深的一定开发能力很厉害,反之,不一定成成立,毕竟还有面向过程的C语言大神的。
佛曰:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。这段话用在面向对象上面也是非常形象的,随着学习的深入,我对面向对象的理解也在不断的扩宽。对面向对象的理解也颇有一点只可意会不可言传的意思,但我试图写一写我对面向对象的理解。
众所周知,Java是一门面向对象的语言。在Java的世界里面,万事万物都是对象,大概了解一点Java的都知道Java是面向对象编程。我认为,面向对象绝对是最核心的概念,没有之一。Java三大特性,都是由面向对象概念衍生出来的。
什么是面向对象呢?
万事万物皆对象,可以是一个人、一棵树、一座楼、一张纸等等。计算机是不可能直接表示这些事物的,这个时候就需要我们进行对包含相同属性和行为的事物进行抽象了,抽象结果就是类(class)。
上一段代码,class定义Animal就是一个对象模版
public class Animal {
public String name;
public String sex;
public Integer age;
public void eat() {
System.out.println("动物吃东西");
}
public void run() {
System.out.println("动物奔跑");
}
}
以Animal为例进行抽象,分为静态的属性和动态的行为。这些都是客观存在的,当然限于篇幅,我肯定不可能一一罗列所有动物的属性和行为,这里只是进行简单举例的。这也是我们真正编程时候的思路,有所侧重,有所放弃,对无关紧要的就进行简单处理,甚至直接忽略。这就是一个关乎选择是问题,时间、空间二选一。
什么是对象?
Animal animal = new Animal();
Animal animal2 = animal;
这里的new Animal()就是一个对象,也是Java编程世界里面最常见的元素。animal是对象的引用,一个引用指向一个对象,一个对象可以被多次引用。就像一个人有多重身份一样,是学生,也是孩子,身份就是引用,人就是对象,父母给你买了一件新衣服穿身上,你到学校作为学生身份的时候这件新衣服还是在。你在学校弄脏了你的新衣服,回家的作为儿子的时候你这个脏衣服还是在的。你早上去学校读书,晚上回家,这个过程中,你衣服的身上的衣服脏了,这就是一种对象状态的改变,这就是随着程序的运行对象的状态会发生改变。
这就是我理解的面向对象的概念,大道至简,或许还是要从实践中,找到真理吧。面向对象不是一个复杂的概念,但确实是最核心的概念,没有之一。关于Java三大特性,可以查看我之前的文章。