【黑马程序员】面向对象(一) 第五天

来源:互联网 发布:电脑ps软件 编辑:程序博客网 时间:2024/04/28 16:50

-------  android培训、java培训、java学习型技术博客、期待与您交流! ----------

知识点

面向对象是一种对现实世界理解和抽象的方法
通过面向对象的方式,将现实世界的物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于人理解的方式对于复杂系统的进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。
面向对象能让复杂的变成简单的,能让执行者变成指挥者

01)面向对象(概述)

三个特征:封装多态


02)举例

一切皆对象,万物皆对象。
例:某某人的车坏了,就去找个会修车的人修车,而会修车的这个人就具备了修车的这个功能,而某某就是在使用这个对象。

03)类和对象的关系

对象是类的实例。可以使用new操作符创建对象,使用 运算符(.)通过对象的引用变量来访问该对象的成员。
类:就是对现实生活中事物的描述。
对象:就是这类事物,实实在在的个体。


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 + "个轮胎。");}}

运行结果如下图所示:


04)成员变量和局部变量

作用范围:成员变量作用于整个类中。局部变量作用于函数中,或语句中。
在内存中的位置:成员变量,在内存中,因为对象的存在,才在内存中存在。 局部变量,存在内存中。

05)匿名对象的应用

匿名对象使用对象一:当对对象的方法只调用一次时可以用匿名对象来完成,这样写比较简化。如果对一个对象的多个成员进行调用时,必须给这个对象起个名字。
匿名对象使用对象二:可以将匿名对象作为实际参数进行传递。
new Car();//创建匿名对象,运行后在内存中边垃圾,被释放。
new Car().num = 10;//创建匿名对象,并num的值为10。运行后同上。

06)封装


封装:在使用对象时,没有必要知道对象在内部是如何完成功能操作的,只要指挥对象去做,知道结果就可以了。
举例:比如我找比老师买电脑,我就在使用毕老师这个对象。至于比老师如何和销售商砍价,如何与销售商说需求硬件信息,这些细节(被比老师封装,隐藏的)对于我来说都是没必要了解。我只需要付钱,拿到货后就能使用电脑了。
函数本身就是一个最小的封装体。

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 + "!");}}
运行结果如下图所示:


08)构造函数。



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("真好吃!");}}
运行结果如下图所示:


09)**构造代码块。


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("我总是第一个执行的!");}}
运行结果如下图所示:


10)this关键字

this是指向调用对象本身的引用
this给出一种指代对象的方法,这样,可以在实例方法代码中调用实例方法。
this的另一个常用方法是让构造方法调用同一个类的另一个构造方法。


11)this关键字的应用



附言:我是Java新人,如有错误的地方请指出。
每天学习一点点,纠错一点点,进步很大点。



-------  android培训、java培训、java学习型技术博客、期待与您交流! ----------