【黑马程序员】面向对象(一) 第五天
2013-03-11 02:12
281 查看
------- android培训、java培训、java学习型技术博客、期待与您交流!
----------
知识点
面向对象是一种对现实世界理解和抽象的方法。通过面向对象的方式,将现实世界的物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于人理解的方式对于复杂系统的进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。
面向对象能让复杂的变成简单的,能让执行者变成指挥者。
01)面向对象(概述)
三个特征:封装,继承,多态。![](http://img.my.csdn.net/uploads/201303/10/1362875874_4221.jpg)
02)举例
一切皆对象,万物皆对象。例:某某人的车坏了,就去找个会修车的人修车,而会修车的这个人就具备了修车的这个功能,而某某就是在使用这个对象。
03)类和对象的关系
对象是类的实例。可以使用new操作符创建对象,使用运算符(.)通过对象的引用变量来访问该对象的成员。
类:就是对现实生活中事物的描述。
对象:就是这类事物,实实在在的个体。
![](http://img.my.csdn.net/uploads/201303/10/1362879134_9537.jpg)
![](http://img.my.csdn.net/uploads/201303/10/1362880114_8175.jpg)
public class CarDemo { public static void main(String[] args) { Car c = new Car();//c就是一个类类型变量 c.time = "改变前"; c.run();//改变前。 c.color = "蓝色";//将已有车的颜色改成蓝色 c.num = 100;//修改车的轮胎数。 c.time = "改变后"; c.run();//改变后。 } } class Car{ String color = "红色";//描述颜色。 int num = 4;//描述轮胎数。 String time =null; void run(){//运行行为 System.out.println(time + " 这辆车的颜色是" + color + "的, 有" + num + "个轮胎。"); } }
运行结果如下图所示:
![](http://img.my.csdn.net/uploads/201303/10/1362880579_5167.jpg)
04)成员变量和局部变量
作用范围:成员变量作用于整个类中。局部变量作用于函数中,或语句中。在内存中的位置:成员变量,在堆内存中,因为对象的存在,才在内存中存在。 局部变量,存在栈内存中。
05)匿名对象的应用
匿名对象使用对象一:当对对象的方法只调用一次时可以用匿名对象来完成,这样写比较简化。如果对一个对象的多个成员进行调用时,必须给这个对象起个名字。匿名对象使用对象二:可以将匿名对象作为实际参数进行传递。
new Car();//创建匿名对象,运行后在内存中边垃圾,被释放。
new Car().num = 10;//创建匿名对象,并num的值为10。运行后同上。
06)封装
![](http://img.my.csdn.net/uploads/201303/10/1362883340_9057.jpg)
封装:在使用对象时,没有必要知道对象在内部是如何完成功能操作的,只要指挥对象去做,知道结果就可以了。
举例:比如我找比老师买电脑,我就在使用毕老师这个对象。至于比老师如何和销售商砍价,如何与销售商说需求硬件信息,这些细节(被比老师封装,隐藏的)对于我来说都是没必要了解。我只需要付钱,拿到货后就能使用电脑了。
函数本身就是一个最小的封装体。
06)如何进行封装
private:私有,权限修饰符。用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效,私有只是封装的一种体现形式。
public class CatEat { public static void main(String[] args) { Cat c = new Cat(); c.setName("汤姆");//修改name的值为“汤姆”。 c.setEat("地球");//修改eat的值为“地球”。 c.eat(); } } class Cat{ private String name;//被封装,只能在Cat类中使用。 private String eat;//同上。 public void setName(String name){ this.name = name; } public String getName(){ return name; } public String getEat(){ return eat; } public void setEat(String eat){ this.eat = eat; } void eat(){ System.out.println(name + "正在啃" + eat + "!"); } }运行结果如下图所示:
![](http://img.my.csdn.net/uploads/201303/10/1362887000_2788.jpg)
08)构造函数。
![](http://img.my.csdn.net/uploads/201303/10/1362890890_6482.jpg)
![](http://img.my.csdn.net/uploads/201303/10/1362892581_3985.jpg)
![](http://img.my.csdn.net/uploads/201303/10/1362893167_8909.jpg)
public class CatDemo_3 { public static void main(String[] args) { Cat_1 c1 = new Cat_1();//调用无参构造。 Cat_1 c2 = new Cat_1("汤姆"); Cat_1 c3 = new Cat_1("汤姆", "地球"); } } class Cat_1{ private String name;//初始值为null。 private String eat;//初始值为null。 Cat_1(){ System.out.print("A: " + name + "在吃" + eat); eat(); } Cat_1(String name){ this.name = name; System.out.print("B: " + name + "在吃" + eat); eat(); } Cat_1(String name, String eat){ this.eat = eat; this.name = name; System.out.print("C: " + name + "在吃" + eat); eat(); } private void eat(){ System.out.print("\t" + name + "说" + eat); System.out.println("真好吃!"); } }运行结果如下图所示:
![](http://img.my.csdn.net/uploads/201303/10/1362892692_8232.jpg)
09)**构造代码块。
![](http://img.my.csdn.net/uploads/201303/10/1362897448_8784.jpg)
public class CatDemo_4 { public static void main(String[] args) { Cat_2 c1 = new Cat_2();//调用无参构造。首先运行eat()函数; Cat_2 c2 = new Cat_2("汤姆"); Cat_2 c3 = new Cat_2("汤姆", "地球"); } } class Cat_2{ private String name;//初始值为null。 private String eat;//初始值为null。 { eat();//构造代码块,只要创建了对象,都是第一个执行。 } Cat_2(){ System.out.println("A: " + name + "在吃" + eat); } Cat_2(String name){ this.name = name; System.out.println("B: " + name + "在吃" + eat); } Cat_2(String name, String eat){ this.eat = eat; this.name = name; System.out.println("C: " + name + "在吃" + eat); } void eat(){ System.out.println("我总是第一个执行的!"); } }运行结果如下图所示:
![](http://img.my.csdn.net/uploads/201303/10/1362912454_1414.jpg)
10)this关键字
this是指向调用对象本身的引用。this给出一种指代对象的方法,这样,可以在实例方法代码中调用实例方法。
this的另一个常用方法是让构造方法调用同一个类的另一个构造方法。
![](http://img.my.csdn.net/uploads/201303/10/1362918613_9215.jpg)
11)this关键字的应用
![](http://img.my.csdn.net/uploads/201303/10/1362918873_2414.jpg)
附言:我是Java新人,如有错误的地方请指出。
每天学习一点点,纠错一点点,进步很大点。
------- android培训、java培训、java学习型技术博客、期待与您交流!
----------
相关文章推荐
- 黑马程序员------毕老师视频笔记第五天------面向对象(this关键字)
- 黑马程序员--Java基础学习(面向对象)第五天
- 黑马程序员——>第五天<面向对象(匿名对象-封装-构造代码块-this关键字)>
- 黑马程序员------毕老师视频笔记第五天------面向对象(封装)
- 黑马程序员------毕老师视频笔记第五天------面向对象(构造函数)
- 黑马程序员 —— 面向对象(第五天)
- 黑马程序员-第五天(面向对象)
- 黑马程序员——java第五天:面向对象(类、对象、变量、封装、构造、this)
- 黑马程序员 java学习笔记——面向对象3:多态(含内部类)
- 黑马程序员_JAVA_面向对象(三)
- 黑马程序员—java技术blog—第一篇:面向对象
- 黑马程序员_Java语言_面向对象
- 黑马程序员面试题面向对象二(多态,抽象类abstract,接口Interface,内部类,异常Exception,包package,String类,StringBuffer)
- 黑马程序员面向对象-----多态
- 黑马程序员 JAVA初级-面向对象 匿名对象、封装、构造函数、构造代码块、this
- 黑马程序员——java第六天:面向对象(静态、帮助文档、对象初始化过程、单例)
- 黑马程序员 Java面向对象——集合框架(Collection)
- 黑马程序员_java封装-继承-多态为面向对象的三大基石
- 黑马程序员--走向面向对象的世界
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)