资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,延时符,智 能 家 居 系 统,Smart Home System,团队:夏继媛 晏 凯 唐建东 吴丽春,张立涓 许亚兰 张秀君,延时符智 能 家 居 系 统Smart Home Sy,面向对象程序设计(一),面向对象概念,类与对象,构造方法,内部类,Static,关键字,面向对象程序设计(一)面向对象概念类与对象构造方法内部类St,面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。,面向过程就是分析解决问题所需要的步骤,面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。,面向对象的特点主要可以概括为封装性、继承性和多态性,。,一、面向对象的概念,面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种,一、面向对象的概念,封装性,将对象的属性和行为封装起来,不需要外界知道具体实现细节,如,用户使用电脑,等。,继承性,描述类与类之间的关系,通过继承,可以在无须重新编写原有类的情况下,对原有类的功能进行扩展。如,汽车与轿车,。,多态性,在程序中允许出现重名限制,在一个类中定义的属性和方法被其他类继承后,可以具有不同的数据类型或表现出不同的行为。如,cut,单词,理发师剪发,演员停止表演,等。,一、面向对象的概念封装性,二、类与对象,面向对象的编程思想力图在程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出两个概念,即类和对象。,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。,类和对象的关系如同玩具和玩具模型的关系。,可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系。类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例,,,并且一个类可以对应多个对象,二、类与对象面向对象的编程思想力图在程序中对事物的描述与该,2.1,类的定义,在面向对象的思想中最核心就是对象,为了在程序中创建对象,首先需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为,类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性,成员方法用于描述对象的行为,可简称为方法,二、类与对象,2.1 类的定义 二、类与对象,2.1,类的定义,定义一个,Person,类,Person,是类名,,age,是成员变量,,speak(),是成员方法。在成员方法,speak(),中可以直接访问成员变量,age,。,二、类与对象,2.1 类的定义 二、类与对象,2.2,对象的创建与使用,应用程序想要完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。,在,Java,程序中可以使用,new,关键字来创建对象,具体格式如下:,例如,创建一个,Person,对象,具体示例如下:,二、类与对象,2.2 对象的创建与使用 二、类与对象,2.2,对象的创建与使用,“,new Person(),”用于创建,Person,类的一个实例对象,“,Person p,”则是声明了一个,Person,类型的变量,p,。中间的等号用于将,Person,对象在内存中的地址赋值给变量,p,,这样变量,p,便持有了对象的引用,,变量,p,和对象之间的引用关系如下图所示。,二、类与对象,2.2 对象的创建与使用 二、类与对象,2.2,对象的创建与使用,在创建,Person,对象后,可以通过对象的引用来访问对象所有的成员,具体格式如下:,看一个例子,具体如下:,二、类与对象,2.2 对象的创建与使用 二、类与对象,2.2,对象的创建与使用,在,上例,中,通过“,p1.age=18,”将,p1,对象的,age,属性赋值为,18,,没有对,p2,对象的,age,属性进行赋值,,但,p2,对象的,age,属性也是有值的,其值为,0,。这是因为在针对不同类型的成员变量,,Java,虚拟机会赋予不同的初始值,。,二、类与对象,2.2 对象的创建与使用 二、类与对象,2.3,类的设计,假设要在程序中描述一个学校所有学生的信息,可以先设计一个学生类(,Student,),在这个类中定义两个属性,name,、,age,分别表示学生的姓名和年龄,定义一个方法,introduce(),表示学生做自我介绍。,二、类与对象,2.3 类的设计 二、类与对象,2.4,类的封装,先来看一个例子,具体如下:,运行结果,在第,5,行代码中,将年龄赋值为一个负数,-30,,这在程序中不会有任何问题,但在现实生活中明显是不合理的。为了解决年龄不能为负数的问题,在设计一个类时,应该对成员变量的访问作出一些限定,不允许外界随意访问。这就需要实现类的封装,。,二、类与对象,2.4 类的封装在第5行代码中,将年龄赋值为一个负数-30,,2.4,类的封装,所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用,private,关键字来修饰,私有属性只能在它所在类中被访问,为了能让外界访问私有属性,需要提供一些使用,public,修饰的公有方法,其中包括用于获取属性值的,getXxx,方法和设置属性值的,setXxx,方法,二、类与对象,2.4 类的封装 二、类与对象,2.4,类的封装,使用,private,关键字将属性,name,和,age,声明为私有,getName(),方法用于获取,name,属性的值,,setName(),方法用于设置,name,属性的值,getAge(),和,setAge(),方法用于获取和设置,age,属性的值。在,setAge(),方法中对参数,stuAge,的值进行检查,,二、类与对象,2.4 类的封装使用private关键字将属性name和ag,三、构造方法,3.1,构造方法的定义,在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具体如下:,方法名和类名相同,方法名的前面没有返回值类型的声明,方法中不能使用,return,语句返回一个值,三、构造方法3.1 构造方法的定义,3.1,构造方法的定义,本,例,中,的,Person,类中定义了一个无参的构造方法,Person(),。从运行结果可以看出,,Person,类中无参的构造方法被调用了。这是因为第,9,行代码在实例化,Person,对象时会自动调用类的构造方法,“,new Person(),”语句的作用除了会实例化,Person,对象,还会调用构造方法,Person(),三、构造方法,3.1 构造方法的定义本例中的Person类中定义了一个无参,3.1,构造方法的定义,在一个类中除了定义无参的构造方法,还可以定义有参的构造方法,通过有参的构造方法就可以实现对属性的赋值,三、构造方法,Person,类中定义了有参的构造方法,Person(int a),。第,13,行代码中的“,new Person(20),”会在实例化对象的同时调用有参的构造方法,并传入了参数,20,。在构造方法,Person(int a),中将,20,赋值给对象的,age,属性。通过运行结果可以看出,,Person,对象在调用,speak(),方法时,其,age,属性已经被赋值为,20,。,3.1 构造方法的定义三、构造方法Person类中定义了有参,3.2,构造方法的重载,与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可,Person,类中定义了两个构造方法,它们构成了重载。在创建,p1,对象和,p2,对象时,根据传入参数的不同,分别调用不同的构造方法。从程序的运行结果可以看出,两个构造方法对属性赋值的情况是不一样的,其中一个参数的构造方法只针对,name,属性进行赋值,这时,age,属性的值为默认值,0,。,三、构造方法,3.2 构造方法的重载Person类中定义了两个构造方法,它,脚下留心,在,Java,中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在其方法体中没有任何代码,即什么也不做。,下面程序中,Person,类的两种写法效果是完全一样的。,脚下留心在Java中的每个类都至少有一个构造方法,如果在一,如果,为该类定义了构造方法,系统就不再提供默认的构造方法了,运行结果,可以看出程序在编译时报错,其原因是调用,new Person(),创建,Person,类的实例对象时,需要调用无参的构造方法,而我们并没有定义无参的构造方法,只是定义了一个有参的构造方法,系统将不再自动生成无参的构造方法,脚下留心,如果为该类定义了构造方法,系统就不再提供默认的构造方法了可以,四、,static,关键字,4.1,静态变量,在一个,Java,类中,可以使用,static,关键字来修饰成员变量,该变量被称作静态变量,静态变量被所有实例共享,可以使用“类名,.,变量名”的形式来访问,static,关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的代码是非法的。,四、static关键字4.1 静态变量,4.1,静态变量,四、,static,关键字,例,中,Student,类中定义了一个静态变量,schoolName,,用于表示学生所在的学校,它被所有的实例所共享。由于,schoolName,是静态变量,因此可以直接使用,Student.schoolName,的方式进行调用,也可以通过,Student,的实例对象进行调用,如,stu2.schoolName,。在第,8,行代码将变量,schoolName,赋值为“传智播客”,通过运行结果可以看出学生对象,stu1,和,stu2,的,schoolName,属性均为“传智播客”。,4.1 静态变量四、static关键字例中Student类中,4.2,静态方法,被,static,关键字修饰的方法称为静态方法,同静态变量一样,静态方法可以使用“类名,.,方法名”的方式来访问,也可以通过类的实例对象来访问。,在一个静态方法中只能访问用,static,修饰的成员,原因在于没有被,static,修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。,四、,static,关键字,4.2 静态方法四、static关键字,4.2,静态方法,例,中,的,Person,类中定义了静态方法,sayHello(),,在第,8,行代码处通过“,Person.sayHello(),”的形式调用了静态方法,由此可见静态方法不需要创建对象就可以调用。,四、,static,关键字,4.2 静态方法例中的Person类中定义了静态方法sayH,5.1,成员内部类,在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。,在成员内部类中可以访问外部类的所有成员,例中Outer类是一个外部类,在该类中定义了一个内部类Inner和一个test()方法,其中,Inner类有一个show()方法,在show()方法中访问外部类的成员变量num,test()方法中创建了内部类Inner的实例对象,并通过该对象调用show()方法,将num值进行打印。从运行结果可以看出,内部类可以在外部类中被使用,并能访问外部类的成员,五、内部类,5.1 成员内部类例中Outer类是一个外部类,在该类中定义,五、内部类,5.1,成员内部类,如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,创建内部类对象的具体语法格式如下:,针对,上例,中定义的,Outer,类写一个测试程序,运行结果同,上例,一样。,五、内部类5.1 成员内部类,5.2,静态内部类,可以使用,static,关键字来修饰一个成员内部类,该内部类被称作静态内部类,,,它可以在不创建外部类对象的情况下被实例化。创建静态内部类对象的具体语法格式如下:,四、内部类,5.2 静态内部类四、内部类,5.3,方法内部类,方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。,四、内部类,例中,在Outer类的test()方法中定义了一个内部类Inner。由于Inner是方法内部类,因此程序只能在方法中创建该类的实例对象并调用show()方法。从运行结果可以看出,方法内部类也可以访问外部类的成员变量num。,5.3 方法内部类四、内部类例中,在Outer类的test(,THANKS,演示完毕,感谢收看,延时符,THANKS演示完毕延时符,
展开阅读全文