(5)面向对象,封装&this关键字

来源:互联网 发布:u盘 恢复数据.电脑 编辑:程序博客网 时间:2024/06/06 00:59

1…面向对象

 

l      面向对象是相对面向过程而言

l      面向对象和面向过程都是一种思想

l      面向过程

•        强调的是功能行为

l      面向对象

•        将功能封装进对象,强调具备了功能的对象。

l      面向对象是基于面向过程的。

 

1.1

类和对象:

 

对象的特点在于封装数据,数据包含属性和行为,想要操作对象中的内容就指挥对象做事情就可以了指挥哪个对象要明确一下,

类和对象的关系。类是计算机java语言用来描述事物的方式

 

类就是对现实生活中事物的描述,

 

对象就是这类事物实实在在存在的个体

 

a;现实生活中的对象:张三李四。

 

b;想要描述事物:其实就是提取对象中共性内容。描述就是对具体对象的一个抽象。

 

c;描述时:这些对象的共性有:姓名,年龄,性别,学习java功能。把这个事物描述完以后不具体,但是这类事物我是描述出来了,你想具体的话你就得落实到每个学生身上,因为每个学生都有自己不同的:姓名,年龄

 

具体对象就是对应java在堆内存中用new建立实体。为什么要放在堆内存里面还是个实体呢因为;这个对象里面包含了很多数据,凡是数据多的是要用实体来存储,对象也是用于存储数据的,凡是用于存储多个数据的我们都称之为实体都放在堆内存当中

 

面向对象例子:

图纸就是汽车这类事物的描述,而通过图纸生产出来的这些,都是汽车这些具体的实实在在存在的个体,你操作一个个体跟其他的个体是没有关系的

 

面向对象的特征:

•        封装(encapsulation)

•        继承(inheritance)

•        多态(polymorphism

 

1.2..类的定义

 

l      生活中描述事物无非就是描述事物的属性和行为。

•        如:人有身高,体重等属性,有说话,打球等行为。

l      Java中用类class来描述事物也是如此

•        属性:对应类中的成员变量。

•        行为:对应类中的成员函数。

l      定义类其实在定义类中的成员(成员变量和成员函数)。

 

例子:

class Car

{

       //描述颜色 颜色他是个属性是个具体的值这个值要么是红色要么是其他颜色

       Stringcolor = "红色";

       //描述轮胎数,轮胎数是个具体的数值

       intnum = 4;

 

       //运行行为。

       voidrun()

       {

 

              System.out.println(color+".."+num);

       }

      

}

 

使用类的对象:

              //创建一个对象

Car c = new Car();

 

              //修改对象的属性值…将已有车的颜色改成蓝色。就需要指挥该对象做事情。在java当中的指挥方式是:对象.对象成员

              c.color= "blue";  堆内存中的变量都有一个特点叫做默初始化值 ,,这个车刚产生的时候就具备了颜色这个属性而这个属性在没有红色赋值之前他有个默认值,,堆内存里的实体地址值是16进制的

             

              c.run();

 

2…成员变量和局部变量的区别

l      成员变量:

•        成员变量定义在类中,在整个类中都可以被访问。

•        成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

•        成员变量有默认初始化值。

l      局部变量:

•        局部变量只定义在局部范围内,如:函数内,语句内等。

•        局部变量存在于栈内存中。

•        作用的范围结束,变量空间会自动释放。

•        局部变量没有默认初始化值。

 

 

3…匿名对象

 

;匿名对象:对象可以不起名字,也可以起名字,,匿名就是没有名字

 

new car()这就是一个匿名对象,car q=new car();这样就是给这对象起了一个名字

 

              匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。这里只说方法没说属性,因为调用属性没有意义

              如果对一个对象进行多个成员调用,必须给这个对象起个名字。

 

              匿名对象使用方式二:可以将匿名对象作为实际参数进行传递。

 

 

4…封装

 

4.1..封装概述:

l      封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

l      好处:

将变化隔离。对象内部修改了什么对于我来说都无所谓,因为对象改完了还是那个对象,我还是拿来用,对象内部怎么改变跟我无关我只要拿来用就可以了

 

便于使用。你不用去了解对象内部构造就能完成应用

 

提高重用性。对象封装完以后,这里面怎么变无所谓,反正都是这对象,这个对象可以重复使用,,对象是个封装体就提搞了重用性

 

提高安全性。 你都不懂对象里的内部构造,就随便的去修改对象内部的东西就容易出现安全隐患

 

封装完以后咋用呢:我要对外给你提供点东西,我会对外暴露一些更简单的东西让你用就可以了,,封装隐藏了细节以后对于使用来讲就变得更简单了

 

l      封装原则:

•        将不需要对外提供的内容都隐藏起来。

•        把属性都隐藏,提供公共方法对其访问。

 

注释:

函数就是java代码当中最小的封装体

 

类和框架也是封装体

 

 

/4.2..访问修饰符

 

修饰符的出现是让这个属性或者这个成员具备了特殊的含义

 

private :私有,权限修饰符中的一种:用于修饰类中的成员(成员变量,成员函数)。

私有只在本类中有效。将属性私有化以后,类以外即使建立了对象也不能直接访问

 

常用之一:

•        将成员变量私有化,对外提供对应的set ,get方法对其进行访问。提高对数据访问的安全性

 

 

注意:私有仅仅是封装的一种表现形式。封装不是私有,,其实我不私有我也能实现封装,只要权限在你访问不到的范围内,那么对于我而言就都是封装的

 

代码:

              //定义私有属性

              Privateint age;

              //提供共有访问方法

 

public void setAge(int a)  

              {

                     if(a>0 && a<130)

                     {

                            age = a;

                            speak();

                     }

                     else

                            System.out.println("feifaage");

       }

 

 

 

5…构造函数

 

5.1…

特点:

函数名与类名相同,,,函数名是固定的

不用定义返回值类型,,和void不是一回事,void是一种返回值类型,代表着没有具体结果返回的情况,而构造函数是根本不需要定义返回值类型

不可以写return语句,,返回值类型都没有,那么函数里面就不需要return语句了构造函数当中是不可能出现return语句的,你不写系统也不给你加retrun…

对象一建立就会调用与之对应的构造函数给对象进行初始化。

 

构造函数的作用:可以用于给对象进行初始化。也就是说当我们在堆内存中产生对象的时候这个对象他需要一个初始化动作

 

构造函数的小细节:

当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,为什么自动加一个,是为了方便于该类进行初始化,否则对象是建立不出来的,因为对象没有办法初始化

 

 

注意:

当在类中自定义了构造函数后,默认的构造函数就没有了。也就是说这类里面我自己定义了对对象的初始化方式的话那么系统就不在帮你加一个构造函数了

 

构造函数也可以重载

 

构造函数在对象建立时执行而且只执行一次就完事了你要想在执行就又得new一个对象,那就不是原来那个对象了

 

什么时候定义构造函数呢?

当分析事物时,该事物存在就具备一些特性或者行为,那么将这些内容定义在构造函数中。

 

构造函数在进行定义的时候是否需要未知内容参与运算,需要就定义参数,,比如人一初始化就得有姓名,姓名是未知的,你初始化以后往里面传就可以了

 

代码:

 

       Person()

       {

              System.out.println("A:name="+name+",,age="+age);

             

       }

       /**/

       Person(Stringn)

       {

              name= n;

              System.out.println("B:name="+name+",,age="+age);

 

              //cry();

             

       }

 

5.2.. 构造函数和一般函数

 

a.

构造函数和一般函数在写法上有不同。格式问题

 

b.

在运行上也有不同。

构造函数是在对象一建立就运行。给对象初始化。

而一般方法是对象调用才执行,是给对象添加对象具备的功能。这个功能什么时候用都可以,但是必须得被对象调用才执行,方法必然被对象调用,除了静态

 

c.

一个对象建立,构造函数只运行一次。

而一般方法可以被该对象调用多次。

 

 

6…this关键字

 

特点:this代表其所在函数所属对象的引用。

换言之:this代本类对象的引用。

 

什么时候使用this关键字呢?

当在函数内需要用到调用该函数的对象时,就用this。

 

类里面这些成员被使用,全是由对象来完成的..肯定会有一个地方运行,只有运行的对象才是被this所表示的对象

 

深入理解this:

       this代表它所在函数所属对象的引用。

       简单说:哪个对象在调用this所在的函数,this就代表哪个对象。也就是说哪个对象在调用相对应的函数,那么this就代表哪个对象,,也就是说这个函数在被哪个对象所调用,那么函数里的this就代表那个对象,也就是this在哪个函数里面,哪个函数所属对象,this就代表哪个对象,,

 

 

this语句 :用于构造函数之间进行互相调用。但是用的时候要传相对应的参数,,构造函数之间进行互相调用只能用this语句

 

this语句只能定义在构造函数的第一行。因为初始化的动作要先执行而且只执行一次。如果初始化中还有初始化的话那就先执行那个更细节的初始化,然后再执行自己的初始化..

 

this的应用:当定义类中功能(函数)时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。因为你描述功能的时候,这个时候是还没有对象的,这个时候就用this来表示对象.谁后期调用我了我就代表谁.. 功能就是函数,,,凡是本类功能(函数)内部使用了了本类对象,都用this表示..

 

代码:

        //定义构造函数

    Person(String name)

       {

              //哪个对象初始化时调用这个函数,那么this就代表哪个对象

              this.name= name;

       }

 

注意:一般函数是不能直接调用构造函数的,因为这个this语句是不能用在一般函数中的,只能在构造函数间