第3讲类对象和方法_第1页
第3讲类对象和方法_第2页
第3讲类对象和方法_第3页
第3讲类对象和方法_第4页
第3讲类对象和方法_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三讲 面向对象编程1回顾Java的数据类型:原始数据类型、引用数据类型数据转换有两种类型:自动类型转换和强制类型转换Java提供了一组丰富的运算符数组用于将相同数据类型的多项数据存储在连续的内存单元中Java支持以下控制语句编程结构:if–else,switchfor,while,do-while2本讲目标类和对象的概念(重点、难点)在Java中实现类并创建对象(重点)方法的定义、调用、和参数的传递(重点)构造函数(重点、难点)this关键字(重点)包的使用(重点)继承和多态(重点、难点)访问修饰符和方法修饰符(重点、难点)接口(重点、难点)内部类(嵌套类)(难点)枚举3英语单词--1class 类object 对象OOP-ObjectOrientedProgramming

面向对象编程constructor 构造器,构造方法property 属性,特性method 方法protect 受保护 package 包extends 扩充,延伸,伸展static 静态的4英语单词--2extends 扩充,延伸,伸展static 静态的final 结局,决赛,期末考试abstract 抽象interface 接口implement 实现overload 重载override 重写,覆盖nested 嵌套anonymous 匿名enum 枚举5面向对象编程OOP旨在在计算机程序中模拟现实世界中的概念在OOP中,现实世界的所有事物全都被视为对象能够在计算机程序中用类似的实体模拟现实世界中的实体设计和实现软件系统的方法6对象对象面向对象编程的核心为计算机应用程序提供实用基础完成特定任务表示现实世界中的实体“对象是存在的具体实体,具有明确定义的状态和行为。”7对象的示例收银员对象顾客对象顾客姓名:Julie年龄:28体重:52千克操作:购买商品状态姓名:Annie职衔:收银员年龄:35体重:60千克操作:收款打印帐单行为8属性事物的特性在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享“在类中表示对象或实体拥有的特性时称为属性

”住址姓名属性年龄促销员对象9方法方法操作的实际实现如何执行所请求的操作的规范方法指定操作对象数据的方式在得到操作请求时指定如何做的算法“对象执行的操作称为方法。”10类和对象的区别类是概念模型,定义对象的所有特性和所需的操作对象是真实的模型类定义实体对象是实际的实体所有属于同一个类的对象都具有相同的特性和操作类和对象类是对象的原型11在Java中定义类和创建对象类的命名规则:不能为Java中的关键字不能包含空格或点号“.”可以下划线“_”、字母或“$”符号开头classStudent{StringstuName;StringstuSex;intstuAge;}12类中的方法2-1Java中的方法相当于C语言的函数语法<返回数据类型><方法名>(<数据类型1><参数1>,<数据类型2><参数2>,…){ <语句块>}13类中的方法2-2方法的命名规则:不能为Java中的关键字不能包含空格或点号“.”可以下划线“_”、字母或“$”符号开头实例方法可使用圆点符号来访问对象名.方法名例如:obj.method();方法的参数可以是对象14抽象处理事物复杂性的方法只关注事物的重要细节,而忽略事物的次要细节。15数据抽象抽取出事物中的关键数据抽取出事物中的属性和方法根据具体的应用抽取出类的相关关属性和操作。16数据抽象的示例属性NameStudentNOSeatNumber方法getName()getStudentNO()Student类getSeatNumber()17封装信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来例如,两种或多种化学药品组成一个胶囊例如,手机、电脑将方法和属性一起包装到一个单元中,单元以类的形式实现隐藏属性、方法或实现细节的过程称为封装。18this关键字用于任何实例方法内,指向当前对象this

的值指向对其调用当前方法的对象this

关键字可在需要当前类类型的对象引用时使用19构造方法每当创建一个类的实例时就调用的方法为对象分配内存,初始化实例变量与类同名,但没有返回类型,不使用void两种构造方法参数化构造方法隐式构造方法20垃圾回收使用new关键字来给对象分配内存。Java自动垃圾回收无用对象占用的内存,无需程序员的干预。程序员可以使用System.gc()来方法建议回收垃圾内存。21包包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件有助于避免命名冲突。包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类包将类名空间划分为更加容易管理的块包既是命名机制也是可见度控制机制22继承父类

父类/子类是相对的牛狮子老虎动物类食肉类食草类羊子类23继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类24子类构造方法子类构造方法的名称与类的名称相同先调用父类构造方法,再调用子类构造方法要调用父类构造方法,使用关键字super25继承小结父类的构造方法不能被子类继承除了继承父类的成员,子类也可以有自己的成员可以使用super关键字调用父类的构造方法super()方法始终指向调用类的直接父类super()语句必须是子类构造方法的第一句父类构造方法的调用总是先于子类构造方法26多态性多态性是指“多种形式”它使用不同的实例而执行不同操作多态包括方法重写和方法重载27方法重载3-1方法重载类中有多个具有相同名称的方法方法具有不同的参数列表定义:同一个类中,有两个或多个方法名称相同、参数不同(参数的数据类型不同、或参数的个数相同,或参数的顺序不同),则这些方法重写构成重载28方法重载3-2publicclassDisplayNumber{

/**无参数的显示方法*/voiddisplay(){System.out.println("无参数可显示!");}

/**带参数的显示方法*/voiddisplay(intnum,intnum1){System.out.println("两个整数是:"+num+""+num1);}/**带双精度参数的显示方法*/voiddisplay(doublecount){System.out.println("在display(double)方法内:"+count);} ……}29方法重载3-3publicstaticvoidmain(String[]arg){intcount=25;DisplayNumberdispObj=newDisplayNumber();dispObj.display();dispObj.display(10,20);

/*不存在具有一个int型参数的方法,*int型值自动转化为double型值*/System.out.println("调用display(double)方法,"+"使用int变量:"+count);dispObj.display(count);dispObj.display(25.5);}30方法重写3-1定义:子类中有一个方法和父类的方法名称相同、参数相同(参数的数据类型相同、参数的个数相同)、返回值相同,则子类的这个方法重写父类的方法方法重写子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.methodname()用于调用父类中的方法31方法重写3-2父类和子类中具有相同名称和类型的方法classRectangle{intlength;intwidth;Rectangle(){}//父类无参构造方法

Rectangle(intlen,intwid){length=len;width=wid;}voidgetPerimeter(){/*计算矩形的周长.*/System.out.println("矩形的周长为"+(2*(length+width)));}}classSquareextendsRectangle{Square(intlen){length=len;}voidgetPerimeter(){/*计算周长.*/System.out.println("正方形的周长为"+(4*length));}}32方法重写3-3publicstaticvoidmain(String[]arg){ RectanglerectObj=newRectangle(10,15); rectObj.getPerimeter(); SquaresqObj=newSquare(15); sqObj.getPerimeter(); Rectangle

rsObj=newSquare(15); sqObj.getPerimeter();}调用父类方法调用子类方法33访问修饰符3-1信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节不需要关心防止用户意外删除数据访问修饰符privateprotectedpublic默认34访问修饰符3-2该类或非该类均可访问public只有该类可以访问private相同包中的类可以访问默认该类及其子类的成员可以访问,同一个包中的类也可访问protected35访问修饰符3-3访问修饰符可访问性位置publicprotected默认private同一个类是是是是同一个包内的类是是是否不同包内的子类是是否否不同包的非子类是否否否36特殊修饰符修饰符staticfinalabstract37static修饰符3-1static修饰符修饰的变量称为静态变量static修饰符修饰的方法称为静态方法静态变量和静态方法不依赖对象而存在,可通过类型打点直接访问,如:

类名.静态变量 类名.静态方法()38static修饰符3-2规则只能调用其他静态方法只能访问静态数据不能使用super或this关键字39

publicstaticvoidmain(String[]arg){/**初始化变量*/doubleinch=66;doublefeet=InchesToFeet.convert(inches);System.out.println(inch+"英寸为"+feet+"英尺。");}publicstaticdoubleconvert(doublein){return(in/inches);}static修饰符3-3静态方法40final修饰符4-1

final

final变量=常量final方法不能被重写final类不能被继承

final修饰符可应用于类、方法和变量。

final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。声明为final的类不能被继承;声明为final的方法不能被重写;声明为final的的变量为常量;41final修饰符4-2final

classTestFinal{inti=7;intj=1;voidf(){}}classFurtherextendsTestFinal{}final类不能被继承声明为final的类不能被继承。

final类示例:42final修饰符4-3classTestFinal{

finalvoidf(){}}classFurtherextendsTestFinal{finalvoidf(){}}final方法不能被覆盖在方法声明中使用final关键字向编译器表明子类不能重写此方法。在声明类中,一个final方法只被实现一次。如果一个类为

final类,那么它的所有方法都为隐式的final方法。43final修饰符4-4一个变量可以声明为final,这样做的目的是阻止它的内容被修改。声明final变量后,只能被初始化一次,然后就不能对其值进行修改。一个final变量实质上是一个常量。

classFinalDemo{ publicstaticvoidmain(Stringargs[]){finalintnoChange=20; noChange=30; }}final变量不能被修改44abstract修饰符3-1由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类,抽象方法必须声明在抽象类中抽象方法语法:abstracttypemethod_name(parameter_list);声明抽象类语法:

abstractclass{……}使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节45abstract修饰符3-2抽象类可以具有指向子类对象的对象引用abstract抽象类不能被实例化构造方法

和static

方法不能是抽象的父类的抽象方法往往在子类中实现46abstract修饰符3-3抽象方法不具有任何实现代码abstractclassShape{...........protecteddoublelength;protecteddoublewidth;......................abstractdoublearea();}classSquareextendsShape{/**构造方法.*@paramnum传递至构造方法的参数*@paramnum1传递至构造方法的参数*/Square(finaldoublenum,finaldoublenum1){super(num,num1);}/***计算正方形的面积.*@returndouble*/doublearea(){System.out.println("正方形的面积为:");returnlength*width;}}47接口接口就是某个事物对外提供的一些功能的申明可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点使用interface关键字定义接口一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现48创建接口的步骤2-1//定义方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定义程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}定义一个接口:49创建接口的步骤2-2编译如下:javac

myinterface.java用关键字implements实现接口,例如:classdemoimplements

myinterface如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示: classdemoimplementsMycalc,Mycount50接口使用示例publicclassInterfaceTest{publicstaticvoidmain(String[]args){GForcegForce=newEarth();gForce.show();}}publicclassEarthimplementsGForce

{publicvoidshow(){System.out.println("g="+g);}}publicinterfaceGForce{doubleg=9.8;voidshow();}51Object类Java中的每一个类都是从Object类中继承。当类被定义后,如果没有指定继承,那么类的默认是Object。常用方法:

clone():克隆(复制对象)equals():比较两个对象的内容是否相等

toString():返回代表该对象的字符串52内部类的概念可以在一个类中定义另一个类吗?Java语言可以支持类的嵌套定义,即允许将一个类定义在其它类的内部——内部类思考53内部类的概念classOuter{…………}classInnerA{}classInnerB{}外部类内部类内部类也属于外部类的一部分,是外部类的成员,可以使用private,默认,protected和public,static来修饰内部类内部类可分为:成员内部类、局部内部类、匿名内部类、静态内部类。54内部类与外部类的关系内部类与其所在的外部类之间存在着逻辑上的隶属关系,就像外部类的一个成员。内部类的对象不能单独存在,必须依赖一个外部类的对象内部类中可以直接访问外层类中的成员,包括属性和方法,甚至是private的属性和方法55内部类的分类内部类可分为以下四种:成员内部类局部内部类匿名内部类静态内部类56成员内部类--1classStudent{ …… classBirthday{ intyear; intmonth; intday; …… } ……}在学生类中定义的生日成员内部类在一个外部类中定义的内部类称为成员内部类,其地位类似于外部类的一个普通成员。外部类57成员内部类--2构造成员内部类对象必须先构造外部类的对象方式二:

外部类外部类对象名=new外部类();

外部类.内部类对象名=外部类对象名.new内部类();如:

Students2=newStudent(); Student.Birthdaybirth2=s2.newBirthday(1988,8,17);方式一:

外部类.内部类内部类对象名=new外部类().new内部类();如:Student.Birthdaybirth1=newStudent().newBirthday(1990,10,12);58局部内部类--1在一个外部类中的方法里定义的内部类称为局部内部类,类似于外部类方法中的一个局部变量。因此,局部内部类具有以下特点:局部内部类的作用域仅限于其所在方法体或语句块。局部内部类不允许在其前添加private,protected或public等访问修饰符局部内部类中也不允许定义static属性和方法用于隐藏实现细节最大限度降低了命名的冲突不推荐使用59局部内部类--2classStudent …… voidprintInfo(){ System.out.println("姓名:"+name); System.out.println("性别:"+sex); birth.printBirth(); classCalcAge{ intcalc(intthisYear){ returnthisYear-birth.year; } } CalcAgeca=newCalcAge(); System.out.println("年龄:"+ca.calc(2010)); } ……}在学生类方法中定义的局部内部类,用于计算年龄60匿名内部类--1如果只创建一个类的对象,则该类的名称都可省略,称为匿名内部类,是局部内部类的一个特例或简化匿名类可以继承一个普通的父类,也可以继承一个抽象类。匿名类甚至可以实现一个接口,但不允许实现多个接口。且实现接口时就不能再继承父类了,反之亦然。匿名类的使用目的是为了简洁,如果结构过于复杂会导致代码混乱。此时,可用局部内部类代替。匿名类定义的语法:[父类名|接口名匿名类对象名=]new<父类名|接口名>(参数列表){ <成员声明>};61匿名内部类--2publicstaticvoidmain(String[]args){

Personsp=newPerson("李红",21){

//重写抽象父类Person类的抽象方法

publicvoidwork(){ System.out.println("个人信息:"); this.printInfo(); System.out.println("我是一个java程序开发人员"); } }; sp.work();}匿名类,继承Person类匿名类对象父类62静态内部类--1静态内部类和外部类中其他的静态成员类似静态内部类的对象可以不依赖外部类的对象而存在,可以直接创建,如:外部类.静态内部类对象名=new外部类.静态内部类();如:Student.Birthdaybirth1=newStudent.Birthday(1990,10,12);静态内部类中无法直接使用外部类的非static成员只有外部类或静态内部类中才可以定义static成员。63静态内部类--2//外部类classOuter{ //静态内部类

staticclassInner{ voidmethod1(){ System.out.println("静态内部类中的普通方法"); } staticvoidmethod2(){ System.out.println("静态内部类中的静态方法"); } }}静态内部类64使用内部类的理由使得代码更加简洁、优雅,如:事件监听器的匿名类。可以使得类和类的成员级别一样拥有访问权限,如:成员内部类。可以使得类和局部变量的级别一样,如:局部内部类。完成单独任务的特殊类,于正在设计的类有密切联系。65内部类小结--1成员内部类可以访问外部类的属性和方法。外部类不可以直接访问成员内部类的属性和方法,只能通过成员内部类的对象才能访问成员内部类的属性和方法。局部内部类可以访问外部类的属性和方法,还可以访问其所在方法的局部变量,但这些局部变量必须是final的。匿名类可以访问其父类的成员,但只有一个对象静态内部类只能访问外部类的静态成员。66内部类小结--2区别类型定义访问实例化成员内部类只能定义非静态成员能访问外部类所有成员外部类名.内部类名对象名=new外部类名().new内部类名();匿名类在使用时定义并实例化可以访问其父类的成员匿名类只有一个对象局部内部类不可以定义静态成员能访问外部类所有成员,还可以访问定义该内部类方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论