【文档说明】第三章(上)面向对象基础课件.ppt,共(52)页,697.059 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44847.html
以下为本文档部分文字说明:
类与对象第4章本章目标了解什么是面向对象面向对象的基本概念类对象封装继承多态如何定义类,如何创建对象类成员访问控制权限构造方法包什么是面向对象?ObjectOriendtedProgramming对象以…为导向的程
序设计面向对象就是使用对象进行程序设计,简写成OOP。面向对象的编程语言如今,面向对象的编程思想已经成为主流;面向对象的编程语言正大行其道,最具代表性的有:C++JavaC#连数据库也开始面向对象了,如Oracle。面
向对象的编程思想OOP旨在计算机程序中模拟现实世界中的概念在计算机程序中用相似的实体模拟现实世界中的实体在OOP中,现实世界的所有事物全都被视为对象设计和实现软件系统的方法抽象把相同的或相似的对象归为
一类的这个过程就是抽象,所以,抽象就是分析问题的方法;抽象的基本原则:只关心主要问题,而不关心次要问题;只关心主要矛盾,而不关心次要矛盾;只关心相同的东西,而不关心不同的东西;只关心问题是什么,能够完成什么,而不关心怎样去完成。抽象的过程其实就
是面向对象编程的核心思想。对象对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为;对象其实就是“数据”和“函数”的封装体,其中:数据表示自身的状态,也称作“属性”或“成员数据”;函数表示自身的功能,也称作“方法”或“成员函数”。姓名:布兰尼职衔:收银员年龄:
35体重:60千克操作:收款打印帐单收银员对象顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品顾客对象状态行为类人们为了更好地认识世界,将现实生活中的事物(对象)划分成类;同一类中的事物总是具有一些共性;类以共同的特性和行为定义实体;类是具有相同属性和和行为
的一组对象的集合。人类张三李四王五郑六属性事物的特性在类中用变量表示;每个对象的每个属性都拥有其特定的值;属性名称由类的所有对象共享;对象或实体拥有的特征在类中表示时称为属性。学生对象姓名年龄住址…
…属性方法事物的行为和动作在类中用函数表示;每个对象都有相同的动作和行为;对象执行的操作在类中表示为方法。学生对象吃饭方法睡觉上课……类和对象的区别类是用来描述实体的“模板”或“原型”;对象是实际的实体,每一个对象都是类的一个具体实例;类用来定义对象所有的属性和方法,同一类的所有
对象都拥有相同的特征和操作;可以将类理解成生产产品的模具,而对象则是根据此模具生产的一个个产品。类与结构最简单的理解方式:类结构体结构体变量对象CJava区别在于:结构体一般只有数据(属性)而没有函数(方法)。面向对象的三大原
则封装继承多态封装(capsule)将某些东西包装在一起,然后以新的完整形式呈现出来;隐藏属性、方法或实现细节的处理方式称为封装;封装其实就是有选择性地公开或隐藏某些信息,它解决了数据的安全性问题。一个人类的对象姓名:张三体重:50kg
……密码:******属性走路吃饭……方法可以公开无所谓不可以公开继承继承就是重用现有的类来生成新类的一种特征;通俗地讲就是从现有的类(即父类或基类)创建新类(子类或派生类)的过程;现实生活中,继承可以达到财产重用的目的,而在Java中,继承可以使代码重用。多态多态是指同一函
数在不同的类中有不同的实现;多态的好处就是使类更灵活,更便于扩充。在Java中定义类/*定义学生类*/publicclassVehicle{doublespeed;//变量声明部分,刻画速度intp
ower;//变量声明部分,刻画功率voidspeedUp(ints){//方法定义,刻画加速功能speed=speed+s;}voidspeedDown(intd){//方法定义,刻画减速功能speed=speed-d;}voidsetPower(intp){power=p;}
成员变量成员函数intgetPower(){returnpower;}doublegetSpeed(){returnspeed;}}定义类的语法class类名{成员列表//包括成员变量和成员函数}在J
ava中定义类struct结构体名{成员列表//只有成员变量,没有成员函数};在C中定义结构体习惯上,类名的首字母大写,如:Vehicleclass<类名>{[<成员变量定义>][<构造方法定义>][<成员方法定义>]}
通常,Java中把成员变量放在方法前面定义。定义类的语法成员变量在类体中并且在方法之外定义的变量称为成员变量。[修饰符]变量类型变量名;例如:doublespeed;intpower=2;定义类的语法1.访问控制权限public、private及protec
te、默认的(friendly)2.静态变量修饰符又被称为类变量,静态变量用关键字static表示。3.常量修饰符指在程序中不能被改变的变量,常量用关键字final表示。定义类的语法成员方法1.方法定义方法也由两部分组成,即方法
头和方法体。[<修饰符>]<返回值类型><方法名>([<形参列表>]){[<方法体>]}定义类的语法(1)方法修饰符方法修饰符控制方法在什么条件下使用以及如何使用,包括public(公有的)、private(私有的)及protected(保护的)。(2
)返回值类型返回值类型可以是基本数据类型、应用类型(引用类型)以及void(空类型)。定义类的语法(3)方法名(4)形参列表形参列表是以“,”分开的、参数的数据类型和变量名的列表。(<变量类型1变量名1>,„,<变量类型n变量名n>)定义类的语法2.方法体方
法的功能实现部分,主要由局部变量和语句构成。方法体也可以是空的,即没有任何变量和语句。例如:voidsetName(Stringname){}定义类的语法在Java中创建对象/*Test类,用来容纳main方法*/publicclassTest{/*main方法,程序入口*/publicstat
icvoidmain(String[]args){Vehiclev;//声明Vehicle类型的引用v=newVehicle();//创建Vehicle类型的对象v.speed=100.0;//为速度赋值v.p
ower=2;//为马力赋值v.speedUp(10);//调用成员方法System.out.println(v.speed);v.speedDown(20);System.out.println(v.speed);}}
创建对象的语法和数组相似,对象也是引用数据类型,只能使用new运算符从堆中分配内存;创建对象的一般语法:1、类名引用名;引用名=new类名();或2、类名引用名=new类名();使用已经定义好的类,创建该类对象的过程称为“实例化”。注意:这里要有括号1.声明对象
类名引用名;例如:Vehiclev;;v创建对象的语法2.建立对象并初始化实际上就是将一个类实例化,这是通过new关键字来完成的。例如:v=newVehicle();创建对象的语法0、000x032v0x1032实例对象引用对象引用被赋值后,将指向一个真正的对象,即对
象引用的内存空间中存储这个新建立对象的内存空间的首地址,那么通过对象引用,利用成员运算符(.)就可以访问这个对象的所有可以访问的成员了。对象引用成员运算符.使用成员运算符(.)来访问成员属性或成员方法;一般语法是:对象名
.成员名如:v.power=2;v.speed=100.0;//为成员属性赋值v.speedUp(10);//调用成员方法对象内存空间图110、020x1032v0x1032实例对象引用对象初始化在上例中,对象创建时,成员变量没有初始化,其值都是默认值。创建完成后逐个地
为数据成员赋值,如果想在对象实例化的同时就初始化成员属性,就使用到了构造方法;构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用;请注意:构造方法没有返回值类型,也不能有返回值。构造方法示例/*定义C
onstructorDemo类,对构造方法进行测试*/classConstructorDemo{/*构造方法,方法名与类名完全一致无需指定返回值类型,也不能有返回值*/publicConstructorDemo(){System.out.println("这是构造方法
");}}/*Test类,用来容纳main方法一般将包含有main方法的类声明为public*/publicclassTest{/*main方法,程序入口*/publicstaticvoidmain(String[]args){/*实例化ConstructorDemo类的对象*
/ConstructorDemocd=newConstructorDemo();}}构造方法正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员;构造方法的一般形式:访问权限
类名(形参列表){方法体}因为是由虚拟机来调用构造方法,所以构造方法一般应定义成public。为Student类添加构造方法classStudent{//定义学生类privateStringname;//姓名,私有privateint
age;//年龄,私有privatefloatweight;//体重,私有//构造方法,根据传递进来的参数,为数据成员赋值publicStudent(Stringn,inta,floatw){//分别为每个数据成员赋初始值name=n;age=a;weight=w;}publicvo
idsetName(Stringn){……}//为姓名赋值的方法,公有,代码略publicvoidsetAge(inta){……}//为年龄赋值的方法,公有,代码略publicvoidsetWeight(floatw){……}//为体重赋值的方
法,公有,代码略publicvoiddisplay(){……}//将所有信息打印出来的方法,公有,代码略publicvoiddining(){……}//吃饭的方法,公有,代码略publicvoidwalk(){…
…}//走路的方法,公有,代码略}publicclassTest{publicstaticvoidmain(String[]args){//利用构造方法,为数据成员指定初始值Studentstd=newStudent("张三",18,55);std.display();//将信息打印出来}}(
1)构造方法的方法名与类名相同。(2)构造方法不允许声明返回值。(3)构造方法的作用是完成对类对象的初始化。(4)不可以显式地直接调用构造方法;构造方法只能通过new运算符调用,不能通过对象或类调用。(5)一个类可以定义多个构造方法。构造方法构
造方法(续)每个对象在生成时都必须执行构造方法,而且只能执行一次;如果构造方法调用失败,那么对象也无法创建;在没有定义构造方法的情况下,类会自动产生一个无参数的默认构造方法,这个默认的构造方法什么都不做;一旦显式地定义了构造方法,默认构造方法自
动消失。访问权限:public和privateC语言中结构体的成员可以从任何地方进行访问,这将给数据的安全留下极大的隐患;为了避免从类外部直接访问类成员而造成的数据损坏,Java对类成员的访问制定了约束;关键字public和private是访问修饰符,用来说明某个成
员是否可以从类外部进行访问;public修饰的成员可以在任何地方进行访问,不受任何约束;private修饰的成员只能够被本类中的其它成员访问,而不能从类的外部进行访问。访问权限无法从类的外部访问私有成员;其它类的私有成员对于当前类也是隐藏的。可以从类外部访问类属性或方法私有属性或方法公有
不可从类外部访问访问权限示例classStudent{privateStringname;//姓名,私有的,不可以从类外部直接访问privateintage;//年龄,私有的,不可以从类外部直接访问privatefloatweigh
t;//体重,私有的,不可以从类外部直接访问//吃饭的方法,公有的,可以从任何地方访问publicvoiddining(){System.out.println("吃饱了...");weight++;
//dining方法是类内部成员,可以直接访问本类私有成员}//走路的方法,公有的,可以从任何地方访问publicvoidwalk(){System.out.println("走累了...");weight--;//walk方法是类内部成员,可以直接访问本类
私有成员}}publicclassTest{publicstaticvoidmain(String[]args){Studentstd=newStudent();//实例化一个Student对象std.age
=18;//试图从类外部访问私有成员,将会报出一个错误std.dining();//允许访问公有成员}}访问权限(续)加上访问修饰符有时候可能会给操作数据带来不便,但可以在很大程度上保证数据的安全;一般
地,我们会将成员属性声明为private,而将成员方法声明为public,但这样做并不是绝对的;有时候,类外部可能要操作到某些私有数据成员,那么就可以增加一个公有的方法,再由这个方法来操作私有数据,避免因类外部的误操作而造成
的数据损坏;因为main方法要由类外部的虚拟机来调用,所以main方法必须声明成public。修改Student类classStudent{//定义学生类privateStringname;//姓名,私
有privateintage;//年龄,私有privatefloatweight;//体重,私有publicvoidsetName(Stringn){//为姓名赋值的方法,公有name=n;}public
voidsetAge(inta){//为年龄赋值的方法,公有age=a;}publicvoidsetWeight(floatw){//为体重赋值的方法,公有weight=w;}publicvoiddisplay(){//将
所有信息打印出来的方法,公有System.out.println("姓名:"+name+",年龄:"+age+",体重:"+weight);}publicvoiddining(){……}//吃饭的方法,公有,代码略publicvo
idwalk(){……}//走路的方法,公有,代码略}publicclassTest{publicstaticvoidmain(String[]args){Studentstd=newStudent();//实例化学生类对象std.setName("张三");//为姓
名赋值std.setAge(18);//为年龄赋值std.setWeight(55);//为体重赋值std.dining();//调用吃饭的方法std.display();//将信息打印出来}}1、静态成员用修饰符static描述的成员。包括静态变量和静态方法,又称为类变量和类方法。
2、非静态成员对象变量和对象方法静态成员(static)1、类变量的访问类变量不依赖于对象。访问方式;类名.变量名2、类方法访问类名.方法名静态成员访问1、对象变量的访问对象名.变量名2、对象方法访问对象名.方法名非静态成员访问1、类变量为所有对象共享,在内存空间每个类变量只有一个存储空间;
对象变量为对象自己所有,每个对象都有一个自己对象变量的存储空间,一个对象的对象变量的值发生变化,不会影响其它对象的对象变量的值。2、静态方法中不能访问本类的非静态成员;非静态方法可以访问本类的任何成员。静态成员与非静态成员区别classStud
ent{//定义学生类Stringname;//姓名,私有intage;//年龄,私有staticintcount=0;intnumber=0;publicStudent(){count++;number++;}publicstaticvoidprintCo
unt(){System.out.println(“学生人数:"+count);}}publicclassTest{publicstaticvoidmain(Stringarg[]){Strudents1,s2;s1=newStudent();s1.age=10;s
1.name=“张三”s2=newStudent();s2.age=20;s2.name=“李四”System.out.println(Student.count);System.out.println(s1
.number);System.out.println(s2.number);//Student.count=30;}对象内存空间图张三100x1032s11李四200x103es212countnumbernumber总结对象由状态(属
性)和行为(方法)组成;类是具有相同属性和方法的对象的集合;封装可以隐藏对象实现的具体细节;必须先实例化类的对象,才可以访问到其中的成员;成员运算符用于访问对象的成员;成员可以定义为公有,也可以定义为私有;构造方法一般用来初始化对象中的数据成员
;如果不定义构造方法,将有默认的构造方法,一旦定义,默认的构造方法自动消失。