java -面向对象编程-类与对象
2017-01-01 15:38
651 查看
上一章讲了面向对象编程的理念以及为什么要学习面向对象编程。但是我们也说了。面向对象编程是一个理念,要掌握它不是一日之功,而是要不断地学习,实践再学习。而今天说讲的内容,就是你学习面向对象编程的第一步:类与对象。这是面向对象编程中最基础的一个部分,也可以说是必须掌握的一个部分。话不多说,让我们开始学习吧!
首先,以一个问题作为入门:汽车有什么品牌?熟悉汽车的朋友跳出来了,说:“奔驰,路虎,本田,现代,拖拉机!”在这里,我们先不讨论拖拉机是不是汽车,但我们要讨论的问题是:“汽车是什么东西?”我们知道汽车有很多品牌,但是,我们可以说奔驰是汽车,但我们能说汽车就是奔驰吗?要是可以,那你把法拉利放哪里去了?事实上,我们都明白,汽车其实就是一个统称,统称的是什么呢?有四个轮子,方向盘,车轴,发动机,可以开动的机器,我们叫做汽车。但是你要说一个具体什么东西叫做汽车的话,就好比说我要吃水果,但我不知道什么叫水果是一样的。因为不论是汽车,还是水果,实际上都是我们根据现实生活中的具象所拥有的一些特质而抽象出来的一个名词,就比如人,男人是人,女人也是人,小孩是人,老人也是人。但人是什么?我们能用一个具体的东西来说明吗?不能吧。事实上,面向对象编程也是。我们把一些具有共同性质的属性或者方法封装在一块,合成一个叫做类的抽象名称。而在实际的编程中,我们可以根据实际需要去选择具体的东西,比如说我到汽车店去说:“我要买一辆汽车”工作人员问你要什么汽车,你说,我就要汽车啊!听我的,别这么说,会被打骨折的。那么别人问你要什么车的时候,怎么回答呢?你应该说我要一台法拉利啊!那么工作人员就会屁颠屁颠地给你拿一辆法拉利过来了。虽然说没钱买,但是看看也还是可以的嘛,是吧。同样,我们在实际编程中也需要一个具体的东西来描述我们刚才封装起来的类,这个具体的东西就叫对象。类与对象的关系,就是抽象与具象的关系。怎么说呢?类是水果,是抽象的,而对象可以是苹果,香蕉,葡萄,桃子,这些都是具体的可以看的到的东西,而这些东西的共同特质,也组成了水果这么一个类。
如果你看完上面这么一段纠结的话之后,相信你也会对类和对象有一丢丢的理解了,那么事不宜迟,我们来创建一个类吧!
在这里,创建类的基本格式是:
class 类名 {
类的属性或者方法
}
注意:类的首字母必须大写
那么,创建了这个类之后呢?我们该怎么弄出个具体的对象呢?这里用到的方法官方叫做实例化对象,这也是为什么有的编程语言把对象就做实例(instance)的原因。但实际上,我们更喜欢用民间说法:new 一个对象,为什么这么说呢?因为我们实际上就是用new这个关键字来实例化一个对象的,且看:
糟糕!忘了设置刹车方法了!!不怕,没了就再new一辆!反正不用钱!!
哈哈,你看,在这里,我们实现了实例化对象的操作,基本格式如下:
类名 对象名 = new 类的构造方法
在这里,关于类的构造方法,会在下一章做详细的说明。为什么不趁热打铁呢?因为在构造方法里涉及一些比较混乱,并且又容易被人混淆的东西。所以这里先不说。现在知道的就是说构造方法的一个表现形式就是类名()就可以了,比如上面的Car();而这个表现形式也是应用得非常多的。一般说来,我们通过这个东西,就可以创建出一个对象了。那么,代码上说的那些:
falali.color = White;
falali.weight =1450;
falali.go();
这些东西是什么呢?实际上,就是给你创建的这辆法拉利进行赋值以及调用方法。也就是说,当你创建出一个对象的时候,如何去操作这个对象呢?就是通过变量赋值以及方法调用的方式去实现的。
最后,解决一个最大的问题:有人可能会问,在上面这个例子中,Car类都没有刹车这个方法,说明Car类不能算汽车类,因为它并没有包含汽车的所有属性或者方法。所以,它应该不是一个类,自然的,所创建出来的falali也不能算汽车对象。你们觉得这么对吗?
———————-思考分割线————————————–
答案:在这个世上,其实哪有什么办法去获得一个物体的所有属性呢?我们所定义的类,不是说一定要包含全部的属性才叫做类,而是说在类中,封装了我们在实际编程中所需要用到的属性和方法就足够了。否则的话,要是你要创建一个People类,然后把People的十八代信息都给装进去的话,老板不找你麻烦,电脑都要关机来抗议了!所以,如何定义一个类呢?就是根据编程实际需求来定义。所有的属性和方法,都是在编程中所需要用到的。但是,要注意的是,类的属性有一个要求,就是具有共同性质的。什么意思呢?比如我们创建了一个Car类,却在里面封装了一个和汽车没关系的炸弹属性。这合适吗?总不能说我们new出来的每一辆汽车,法拉利也好,奔驰也好,车子都自带一个炸弹吧!虽然我们说只要用class创建出一个类,那么在编程里,无论它有多么离谱的属性,都是一个正确的类,因为它默认创建这个类的程序员都是十分聪明滴。因此不管创建出的类,里面的属性或者方法多么地离谱,我们都是可以new出实际的对象来的。但是,这个new出来的对象到底适不适合程序的需求?那就又是一回事了。那么,如何避免创建了一个不好的类呢?一个口诀要记住:是你的,打死也要。不是你的,打死也不要。而要如何去分别哪些需要,哪些不要呢?也很简单:多打代码多实践~(防被打大隐身术!)实际上,这也是一个理念的养成必经阶段,不是说藏着掖着这些技巧,就是不透露。而是这是个只可意会,不可言传的过程。只有在实际开发的时候,你的脑子里就会思考,恩,这个类怎么去做。但是要说为什么呢?抱歉,我说不出,必须手动实践,才能慢慢去找到那种感觉,也只有这样,才会自然而然地知道怎么创建一个类是合适的。当然,秘诀还是有的:“从编程需求出发,不需要的不考虑”。好啦,面向对象第一步,创建类来new对象。多加练习吧。下一章预告:java-面向对象编程-谈谈构造方法
首先,以一个问题作为入门:汽车有什么品牌?熟悉汽车的朋友跳出来了,说:“奔驰,路虎,本田,现代,拖拉机!”在这里,我们先不讨论拖拉机是不是汽车,但我们要讨论的问题是:“汽车是什么东西?”我们知道汽车有很多品牌,但是,我们可以说奔驰是汽车,但我们能说汽车就是奔驰吗?要是可以,那你把法拉利放哪里去了?事实上,我们都明白,汽车其实就是一个统称,统称的是什么呢?有四个轮子,方向盘,车轴,发动机,可以开动的机器,我们叫做汽车。但是你要说一个具体什么东西叫做汽车的话,就好比说我要吃水果,但我不知道什么叫水果是一样的。因为不论是汽车,还是水果,实际上都是我们根据现实生活中的具象所拥有的一些特质而抽象出来的一个名词,就比如人,男人是人,女人也是人,小孩是人,老人也是人。但人是什么?我们能用一个具体的东西来说明吗?不能吧。事实上,面向对象编程也是。我们把一些具有共同性质的属性或者方法封装在一块,合成一个叫做类的抽象名称。而在实际的编程中,我们可以根据实际需要去选择具体的东西,比如说我到汽车店去说:“我要买一辆汽车”工作人员问你要什么汽车,你说,我就要汽车啊!听我的,别这么说,会被打骨折的。那么别人问你要什么车的时候,怎么回答呢?你应该说我要一台法拉利啊!那么工作人员就会屁颠屁颠地给你拿一辆法拉利过来了。虽然说没钱买,但是看看也还是可以的嘛,是吧。同样,我们在实际编程中也需要一个具体的东西来描述我们刚才封装起来的类,这个具体的东西就叫对象。类与对象的关系,就是抽象与具象的关系。怎么说呢?类是水果,是抽象的,而对象可以是苹果,香蕉,葡萄,桃子,这些都是具体的可以看的到的东西,而这些东西的共同特质,也组成了水果这么一个类。
如果你看完上面这么一段纠结的话之后,相信你也会对类和对象有一丢丢的理解了,那么事不宜迟,我们来创建一个类吧!
/** 封装了汽车属性和方法的Car类 */ class Car{ Color color; //汽车颜色 float weight;//汽车重量 go(){ //前进方法代码 } left(){ //向左转代码 } right(){ //向右转代码 } back(){ //倒车代码 } }
在这里,创建类的基本格式是:
class 类名 {
类的属性或者方法
}
注意:类的首字母必须大写
那么,创建了这个类之后呢?我们该怎么弄出个具体的对象呢?这里用到的方法官方叫做实例化对象,这也是为什么有的编程语言把对象就做实例(instance)的原因。但实际上,我们更喜欢用民间说法:new 一个对象,为什么这么说呢?因为我们实际上就是用new这个关键字来实例化一个对象的,且看:
Car falali = new Car();//创建一个叫做falali(法拉利)的对象 falali.color = White;//这辆法拉利的颜色是白色。 falali.weight =1450; //重量是1450公斤 falali.go();//调用falali的前进方法,车子向前
糟糕!忘了设置刹车方法了!!不怕,没了就再new一辆!反正不用钱!!
哈哈,你看,在这里,我们实现了实例化对象的操作,基本格式如下:
类名 对象名 = new 类的构造方法
在这里,关于类的构造方法,会在下一章做详细的说明。为什么不趁热打铁呢?因为在构造方法里涉及一些比较混乱,并且又容易被人混淆的东西。所以这里先不说。现在知道的就是说构造方法的一个表现形式就是类名()就可以了,比如上面的Car();而这个表现形式也是应用得非常多的。一般说来,我们通过这个东西,就可以创建出一个对象了。那么,代码上说的那些:
falali.color = White;
falali.weight =1450;
falali.go();
这些东西是什么呢?实际上,就是给你创建的这辆法拉利进行赋值以及调用方法。也就是说,当你创建出一个对象的时候,如何去操作这个对象呢?就是通过变量赋值以及方法调用的方式去实现的。
最后,解决一个最大的问题:有人可能会问,在上面这个例子中,Car类都没有刹车这个方法,说明Car类不能算汽车类,因为它并没有包含汽车的所有属性或者方法。所以,它应该不是一个类,自然的,所创建出来的falali也不能算汽车对象。你们觉得这么对吗?
———————-思考分割线————————————–
答案:在这个世上,其实哪有什么办法去获得一个物体的所有属性呢?我们所定义的类,不是说一定要包含全部的属性才叫做类,而是说在类中,封装了我们在实际编程中所需要用到的属性和方法就足够了。否则的话,要是你要创建一个People类,然后把People的十八代信息都给装进去的话,老板不找你麻烦,电脑都要关机来抗议了!所以,如何定义一个类呢?就是根据编程实际需求来定义。所有的属性和方法,都是在编程中所需要用到的。但是,要注意的是,类的属性有一个要求,就是具有共同性质的。什么意思呢?比如我们创建了一个Car类,却在里面封装了一个和汽车没关系的炸弹属性。这合适吗?总不能说我们new出来的每一辆汽车,法拉利也好,奔驰也好,车子都自带一个炸弹吧!虽然我们说只要用class创建出一个类,那么在编程里,无论它有多么离谱的属性,都是一个正确的类,因为它默认创建这个类的程序员都是十分聪明滴。因此不管创建出的类,里面的属性或者方法多么地离谱,我们都是可以new出实际的对象来的。但是,这个new出来的对象到底适不适合程序的需求?那就又是一回事了。那么,如何避免创建了一个不好的类呢?一个口诀要记住:是你的,打死也要。不是你的,打死也不要。而要如何去分别哪些需要,哪些不要呢?也很简单:多打代码多实践~(防被打大隐身术!)实际上,这也是一个理念的养成必经阶段,不是说藏着掖着这些技巧,就是不透露。而是这是个只可意会,不可言传的过程。只有在实际开发的时候,你的脑子里就会思考,恩,这个类怎么去做。但是要说为什么呢?抱歉,我说不出,必须手动实践,才能慢慢去找到那种感觉,也只有这样,才会自然而然地知道怎么创建一个类是合适的。当然,秘诀还是有的:“从编程需求出发,不需要的不考虑”。好啦,面向对象第一步,创建类来new对象。多加练习吧。下一章预告:java-面向对象编程-谈谈构造方法
相关文章推荐
- Java初学(二)——J2SE之面向对象编程1(类和对象)
- 笔记:Java面向对象编程 第11章 对象 的生命周期
- Java第二课 Java面向对象编程,面向对象编程和面向过程编程的区别,我们如何才能掌握面向对象的编程,类和对象的关系;讲解了Java中的构造、重载、this和super变量、静态变量、Java中的常
- Java面向对象编程 第11章 对象 的生命周期
- java学习之路 之 面向对象编程-面向对象特征之一(封装和隐藏)级类的成员之三(构造器、构造方法)
- java学习之路 之 面向对象编程-类的成员之属性、方法及对象的创建和使用
- 面向对象编程,C#,Java中都有this,this代表了当前的对象,那么JavaScript中this代表什么
- java学习之面向对象编程-类与对象
- [Java入门笔记] 面向对象编程基础(一):类和对象
- Java面向对象-面向对象编程之基本概念
- Java_30_面向对象编程(OOP)的本质_类的方式组织代码_对象的方式组织(封装)数据
- java基础; 面向对象编程; 对象的实例化
- java之面向对象编程1:类、对象、成员变量、成员函数
- JavaScript面向对象编程,严格过程的标准化编程法,目前为止最面向对象的JS模式(像Java)
- java面向对象编程(类、对象)
- 《Java 面试题》 对象、类、面向对象和面向对象编程概念比较
- java学习之路 之 面向对象编程-面向对象-对象的关联
- Java列表对象的性能分析和测试
- 使用 Hibernate 将 Java 对象持久保存到 IBM DB2 通用数据库中
- Java对象序列化(整理篇)