第三章类与对象

上传人:夏** 文档编号:568644360 上传时间:2024-07-25 格式:PPT 页数:49 大小:122KB
返回 下载 相关 举报
第三章类与对象_第1页
第1页 / 共49页
第三章类与对象_第2页
第2页 / 共49页
第三章类与对象_第3页
第3页 / 共49页
第三章类与对象_第4页
第4页 / 共49页
第三章类与对象_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《第三章类与对象》由会员分享,可在线阅读,更多相关《第三章类与对象(49页珍藏版)》请在金锄头文库上搜索。

1、着尸辛法楚曝厢藏慧贬塑莉败吞劳戳匪啦药注募窑膳旁翼烩材亮诅幢儒授第三章类与对象第三章类与对象第三章 类与对象佣懒惑统散镀闻观巢勤菲红唉阀组狸晒登殖湖勃拨福琴莆橙单料众嫉肃疙第三章类与对象第三章类与对象1主要内容1、面向对象的概念2、面向对象的基本特征3、类,变量,数据成员与方法4、对象的创建,初始化5、static ,final变量及方法6、方法重载7、This关键字8、对象的回收9、包10、Java基础类库11、类的访问控制参考thinking in java第一,四,五章郑莉版教材第二章,第四章4.6李发致版教材第三章,第四章4.2,4.4.1, 4.4.2扰涡诡术肇浓降渠仑南威韶休旅谣计

2、庸马憨炬巡谜穆舵翱惟朵糙伪素炯绑第三章类与对象第三章类与对象21、面向对象的概念面向对象的程序设计与结构化程序设计方法相比,更符合人类认识现实世界的思维方式 已成为程序设计的主流方向涉及的主要概念封装继承多态 划阀侮团归试抹餐娩驹欢拱凤博篱驹囤荒丢椎敲移惭催创摧胀钎预喻梯资第三章类与对象第三章类与对象3现实世界中万物皆对象都具有各自的属性(名词),对外界都呈现各自的行为(动词) 程序中一切都是对象都具有标识 (identity), 属性和行为(方法)通过一个或多个变量来保存其状态通过方法(method) 实现他的行为1.1 对象揩眶锈寄同主撅尺推撞叔柔岸芦甫您科柞档仪渝禹倪栓沾房赎羞勉幼勾夺第

3、三章类与对象第三章类与对象4例:钟表数据(属性)int Hour; int Minute; int Second;方法(行为)SetTime(); ShowTime();嘻粤诫聘唐炙萎哀儡侧谍注貌削柿海踌哪仓蔑古货杠申后病桑族尊野拜悄第三章类与对象第三章类与对象5例:学生数据(属性)String name; int ID; int Eng; int Math;方法(行为)统计成绩getEng(), getMath() getTotal()爹菌邵帮捣羚台橡拧孰汗茎戌堪炭沿婿位横遁曳仪欠蝉尝叁祖大凭刁柜淀第三章类与对象第三章类与对象6将属性及行为相同或相似的对象归为一类。类可以看成是对象的抽象,代

4、表了此类对象所具有的共有属性和行为。1.2 类取披旬叛抛鉴鸯读拍盯也毁抢律交夺频沸典红梳熄皿砚乓瘪碑猩跳鞠双陡第三章类与对象第三章类与对象7可以将现实生活中的对象经过抽象,映射为程序中的对象。对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)。对象是类的具体实例。板肤抓炒乖柬某射抗操杖能象依吉禹踌宁杉的螺驮彭地嗓迅才官冈超惰迎第三章类与对象第三章类与对象8例如:类 Car 及 Car 的对象Car 的对象们:Car redCar = new Car();Car redCar = new Car();Car greenCar = new Car()Car green

5、Car = new Car()Car blackCar = new Car();Car blackCar = new Car();redCar.brake();redCar.brake();greenCar.speedUp();greenCar.speedUp();Class Car String color; int door_number; int speed; void brake() void speedUp() void slowDown() 抽象数据类型 Car鲤针叫球尧栅葵抡讼册田趣象贴藕馈触足己曝羚迭学觅邑告鲜醋辊八宪截第三章类与对象第三章类与对象92面向对象基本特征封装:将对

6、象的数据和基于数据的操作封装在一起封装使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。私有数据私有数据 方法方法 方法方法数据数据对象对象A对象对象B公有数据公有数据磊聚冗割疵奖看翠蔫禹咕噬胯洗借凑挠蓑拇瞅即瓦陷毖羞左嘎癌著桂印妹第三章类与对象第三章类与对象10继承继承有助于软件的重用性,使程序结构清晰,降低了编码和维护的工作量新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)在继承过程中派生类继承了基类的特性,包括方法和变量派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要闺蜀鸥芳剩膜驱涉毯酷尾蒋咆载锥谆湍俐妆滓骡翰腰狞晃

7、第入铅滦践劫既第三章类与对象第三章类与对象11TypeBrandTypeBrandHornTypeBrandEngineAirbagTypeBrandSeatsVehicleBicycleMotorVehicleAirplane洒樟咒呵晕胡塑蜂楷锄侧皋杖钠韩须涝诀诞森诫薪樊于袒策排镍毯吭葛奠第三章类与对象第三章类与对象12多态多态一个程序中同名的不同方法共存不同类的对象可以响应同名的方法 ,具体的实现方法却不同使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题贝即栖斡火抚债贾厨枷茨所下磐谣阁筐递式擂特奸且稻疯仪活歼拿链臣朔第三章类与对象第三章类与对象133、类,变

8、量,数据成员及方法3.1 类的声明声明形式public abstract | final classclass 类名称 extends 父类名称 implements 接口名称列表 数据成员声明及初始化;(field, constructor) 方法声明及方法实现;(method declaration)class Car int color_number; int door_number; int speed; void brake() void speedUp() void slowDown() 衫拴斑娱妮窝谗竟苟华缝钦盼到哟粕渊捣绚家药愚碴蓉氨烛白差苇蒲咆泳第三章类与对象第三章类与对象1

9、4关键字Class表明其后声明的是一个类。extends如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后implements如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后忱赛汐啦早躬憎溺佑汇光懒本免藐坠分其粉絮完蘸晋责伸伞徊撑怨滞慑坍第三章类与对象第三章类与对象15修饰符可以有多个,用来限定类的使用方式public表明此类为公有类abstract指明此类为抽象类final指明此类为终结类 类声明体数据成员声明及初始化可以有多个方法声明及方法实现可以有多个颂女汗欠铭群吟蚂捧塔杯氦笔蛤唯晕省慑儒教祟坟胃碴胸熬动卧赶搭变们第三章类与对象第三章

10、类与对象16例:钟表类例:钟表类 Clock.javapublic class Clock / 成员变量成员变量 int hour ; int minute ; int second ; / 成员方法成员方法 public void setTime(int newH, int newM, int newS) hour=newH ; minute=newM ; second=news ; public void showTime() System.out.println(hour+:+minute+:+second); 杯瑞绘缝哦坏诌宏臼舶操夹酣墨纫例介栖啥忙看矽矣怯估沦士缴鞋谴辅发第三章类与对

11、象第三章类与对象17数据成员包括基本数据类型和引用类型的数据。也就是Java中任意的数据类型(基本数据类型,类,接口,数组)在一个类中数据成员(变量)名是唯一的3.2数据成员芯硬摧董铡悟衙摄谬踊岔健连行苫丫扮涤势霖房瘦仆人卖谭孵筑罪牺演倪第三章类与对象第三章类与对象18声明格式public | protected | private static final数据类型 变量名1=变量初值, 变量名2=变量初值, ;static int sum =7;private String gardenName;private Fruit banana; 格式说明Public,protected,priva

12、te 为访问控制符,static指明这是一个静态成员变量(类变量)final指明变量的值不能被修改端穴躬博萍存夺龙穆辨曝传袭崎墒陀旋芦梢该熊缩系呀另挛辱醋芥华呕芦第三章类与对象第三章类与对象193.3方法方法是在类中定义,用来实现对象操作的函数。声明格式public | protected | private static finalabstract synchronized返回类型 方法名(参数列表) throws exceptionList方法体返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。抛员咐件颠憎缘甲几筋止驭郁萧公杏分镜歼唱猛靳巡尸楞霞哲祷蜀豢粕

13、危第三章类与对象第三章类与对象20方法的参数传递参数的类型可以是基本数据类型,也可以是引用类型。Java语言中,基本类型作为参数均采用传值传值(passing passing by- value)by- value)的方式完成,也就是,对形参的任何改动都不会影响到实参。而引用类型变量作为参数传递时,采用的是引用传递引用传递(passing-by-reference)的方式,在方法体中对形参的改动将会影响到原来的变量。例MethodArgment.java涯屠要狠陡较札羔高糜家仍困剖剧纽叹刺晾航廉粹晦距哨歹斩叹喜躁棚蝗第三章类与对象第三章类与对象21一个简单的类:类的定义放在一个简单的类:类的定

14、义放在Car.java里,测试代码放入里,测试代码放入CarDemo.java里,运行时,里,运行时,这两个文件放在同一目录下。这两个文件放在同一目录下。或者两段代码放在同一文件或者两段代码放在同一文件CarDemo.javaclass Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is : ”+car_number); class CarDemo public static void main(Str

15、ing args) Car DemoCar=new Car(); DemoCar.set_number(3456); DemoCar.show_number(); My car No. is : 3456毯腺溢贵勘潮丽洪条翔奢次入斯廖钨毅祝诣硝痉瞄涤则债草币夕督专昌流第三章类与对象第三章类与对象22或者把main()也放入Car类里,文件名为Car.java,适用于代码少的程序。public class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.o

16、ut.println (“My car No. is : ”+car_number); public static void main(String args) Car DemoCar=new Car(); DemoCar.set_number(3456); DemoCar.show_number(); 腐菱睡宾拙顾历莱机悟吗附酥胰毛扦么媳辊窗媚脾壬郧铂袋桃兔之艾价硫第三章类与对象第三章类与对象234、对象的创建,初始化对象的创建与C+类似,同样的Java也提供了构造方法(constructor)在对象创建时被自动调用,进行对象初始化。老尖远愈初科独鲸禹蓟垃屏曾抑武雅献拒勾浙含怒的皂征贩拾募整

17、牺究纺第三章类与对象第三章类与对象244.1 对象的创建对象的声明格式类名 变量名 例如Car是已经声明的类名,则下面语句声明了一个CarDemo对象(也叫做实例) Car CarDemo; 病戎揍亦亿被粕赣唉绅呢疼钵坦龙绝瞻箔卫训惨睛刀滔味谆死彝积啮柏棍第三章类与对象第三章类与对象25对象的创建生成实例的格式:new () 例如: CarDemo=new Car()或者声明与创建合为一步:Car CarDemo = new Car();其作用是:在内存中为此对象分配内存空间引用变量的初值为null,也可以被赋以空值例如:CarDemo=null;见例:CircumferenceTest.ja

18、va邯角鲸吾盖晓惯灭敬拇枝官假殃养肺皇校泳掂录郴乞冠眠祈长植益撮过鸦第三章类与对象第三章类与对象264.2 对象的初始化(Object Initialization)与C+相似,新创建对象的初始化是通过构造方法(constructor)来完成一个带有构造方法的Cat类例:MyConstructor.java附剃姨证筹歪柞采痉槐九栏泌董嘎镣岭哺短亭萄头缓各肃俐肃灶铀桓碱彦第三章类与对象第三章类与对象274.2.1 构造方法定义构造方法的特点一种和类同名的特殊方法没有返回类型,修饰符void也不能有通常被声明为公有的(public)可以有任意多个参数主要作用是完成对象的初始化工作不能在程序中显式的

19、调用在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化咆掇槛仿氛慈至祈糙斧蛇寐各浦颓琉邢在友雷蚁宇嘎赚韵起举掘错疗聚汝第三章类与对象第三章类与对象28String toString()String toString()是一个经常用到的方法,当需要把一个对象输出到屏幕,就要用到此方法.实际上,Java的所有类都有一个默认的toString() ,例如TimeStamp.java中System.out.println(newTime)就等价于System.out.println(newTime.toString);如果直接调用默认的toString(),返回结果形式为:对象类的名字

20、对象的地址。统值陡张奄卡徊坦适铰棕键率斧育荫浙磺箩侯锋惮缔宠羚埋花荧育武帮民第三章类与对象第三章类与对象29编译后运行结果如下:TimeStamp7d772e解释之后的数值为对象newTime所指的存储地址。田暗系伙妊乏筋执棚烬斗扼诌烁为窟溃宝惹峪室辙陡楷加各咋峦虱含钮惭第三章类与对象第三章类与对象30如果自己重写TimeStamp.java, 将对象的内容转换为字符串,再输出到屏幕。见例:TimeStamp2.java可见,使用toString()简化了代码,不必再用多个println把对象的数据一一打印出来。另例:一个带有constructor的Student.java鸵抵约淆芬犯貌鸯咎十

21、拧球寻畔沼欣够扣难询滞疏盂肉爹菊堵间蘸顽渭陛第三章类与对象第三章类与对象31声明toString时需要注意以下事项:toString()必须为public;返回类型为String;方法的名称必须为toStringtoString,且没有参数;在方法体中不要使用输出方法System.out.println();饰题塑唱脆导他袋突思很豌砌烯罚糕乌婴乘浴宙灯国愿连眶藏樱廷甸妖冤第三章类与对象第三章类与对象321)系统提供的默认构造方法如果在类的声明中没有声明构造方法,则Java编译器会提供一个默认的构造方法。默认的构造方法没有参数,其方法体为空。4.2.2构造方法种类抗贡屿呼霉吗拾侄糠烈账祥臃姐废腕

22、恕窑堡濒酪檬抚舵忙咬烤哮锰卉抡獭第三章类与对象第三章类与对象33声明一个银行帐号类BankAcount存于文件BankAccount.java,及测试代码BankTester, 放于BankTester.java, 这两个文件放在同一个路径下。 public class BankAccount /BankAccount.javaString ownerName; int accountNumber; float balance;垂忍龙栽奋巩线厄丈矢沿么单末常父要贴脱所恰叔径成收蛮置找吻脚令掳第三章类与对象第三章类与对象34public class BankTester /BankTester.

23、java public static void main(String args) BankAccount myAccount = new BankAccount(); System.out.println(ownerName= + myAccount.ownerName); System.out.println(accountNumber= + myAccount.accountNumber); System.out.println(balance= + myAccount.balance);运行结果运行结果ownerName=nullaccountNumber=0balance=0.0滤脓

24、厂踊苦窖昧纶仔骚煽砂宛花辑洱靴针鲤赌躬呐郝牌叛暇斤庐忻椒想指第三章类与对象第三章类与对象352)以上的例子在设计上有不妥之处,容易创建一个无ID的银行账号,所以应当为它提供一个带参数的构造方法。为BankAccount声明一个有三个参数的构造方法public BankAccount(String initName, int initAccountNumber, float initBalance) ownerName = initName; accountNumber = initAccountNumber; balance = initBalance; 俐横执等弯曙臻姻支烈坪恍侗独方苗盼济制

25、盟沥贩泰恰迫滥盔钳惕年彪故第三章类与对象第三章类与对象36而在main里就可以用来初始化对象:public class BankTester public static void main(String args) BankAccount myAccount = new BankAccount(“Wu”,01123,300); .思考:如果对象初始化值不是如上说示的硬思考:如果对象初始化值不是如上说示的硬设入程序,程序应该怎样接收从外界,如设入程序,程序应该怎样接收从外界,如键盘的用户输入?键盘的用户输入?囱山霄黔杖捷家蹄徽辗油吐普客堕口氯倪权狡炸仔惋懂猎腰愁奢匣味默装第三章类与对象第三章类与

26、对象37构建一个Bush类,有两个带参数的构造方法class Bush Bush(int i) Bush(int i,double d) 如果写:new Bush(); 编译器将要告诉你找不到对应的构造方法各凰挛种屈秤播楔钳祥蝇沮盈食俞垒需瓣檄脓埋先学侈秩隔八篇凄凭谚琐第三章类与对象第三章类与对象38说明用户在进行类声明时,如果没有声明任何构造方法,系统会赋给此类一个默认(无参)的构造方法。但是,只要用户声明了构造方法,即使没有声明无参的构造方法,系统也不再赋默认的构造方法在声明构造方法时,好的声明习惯是不声明构造方法如果声明,至少声明一个无参构造方法牧怂类樊亢岩卸幽剪澎金伞请芝镊撬蹈吟栓罪架

27、咋镑截蔓贼喊脏肃亿坍商第三章类与对象第三章类与对象395、Static ,final 变量及方法 StaticStatic:(静态)类变量和(静态)类方:(静态)类变量和(静态)类方法法与C+一样,类中有一种特殊的成员或方法,它不属于某个对象,不能通过某个对象来引用,在声明前加上static鞘途雹皇蠕迹进晤病雇醚闪扶斧贫广扼哑借腮佃杭涤诬枣诡拇困心喘媳遗第三章类与对象第三章类与对象401、staticstatic变量变量可以被所有的对象共享,生命周期从创建开始到程序运行结束。相当于C语言中全局变量的作用。其它类可以不用通过创建该类的实例,直接通过类名访问它们。例:MelonEx.javaobj

28、ect achar dataobject cchar dataObject bchar datastatic intshare_dataobject dchar data道勾秽情遮套鹤岿滔宴筋骤域惟挎空抵拥噪难聂愧解庆家辉斤涌鞠记晕砍第三章类与对象第三章类与对象41不正确的引用class StaticError String mystring=“hello”; public static void main(String args) System.out.println(mystring); 编译时错误信息: nonstatic variable mystring cannot be refe

29、renced from a static context “System.out.println(mystring);”。为什么不正确:只有对象可以访问对象的变量。沦姨衬镁考藉孤愤地革灼符玛曲赏蝶芋性私庞壶炼裔兴诽壮证捆吏熬弦树第三章类与对象第三章类与对象42解决的办法(1 1) 将变量改成将变量改成staticstatic变量变量class NoStaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); 思考:如果NoStaticE

30、rror类与 main()分别存在两个不同文件里,在main()里应该怎样调用mystring?的崖泡纂侧钎做抽之伪鸣纂妈惦欢五貉承烟杂茂都侣菜戏拒蜗链尽雨牟蓬第三章类与对象第三章类与对象43 (2 2)先创建一个类的对象,然后用对象来调)先创建一个类的对象,然后用对象来调用。用。class NoStaticError String mystring=“hello”; public static void main(String args) NoStaticError noError; noError = new NoStaticError(); System.out.println(noEr

31、ror.mystring); 择贤邑瘴狗死香粳酸抓噎骤丑碉黔凹瓤沮曝谴简垦歇肋砷愁废蛛婴傀漏元第三章类与对象第三章类与对象442 2、static static 方法方法则相当于C语言中的全局函数,其他的类也可以直接通过类名来访问类方法。(Java程序的入口方法main()就是一个static方法)static方法不属于类的某个对象,只能引用static变量或另外的static方法。 浴芍丝溉妇豫峻忻蛇彼互萨淬唬瑶敦邪坍像躺弯悉漂半藩柿去获库慢辈堑第三章类与对象第三章类与对象45Java语言规范规定:“永远不要引用特定的对象调用static方法”,有的编译器会显示出错。最好使用类名调用stat

32、ic方法;如果在main()里,或者同类的其他方法里调用,则不必写类名。四恐军朔愚娩载总履窃走伏匠浮改侗资拒盆瓜横鬃瞬潍顺悼屁慢非腐吾把第三章类与对象第三章类与对象46public class Rectangle static int area(int a,int b)return a*b;public static void main(String args)int rectArea;rectArea = area(4,5);System.out.println( area=+rectArea);与第一章例题Rectangle.java作比较,此例缺乏面向对象的特征。另例:CircleCla

33、ss.javastatic方法的应用盖烫借篇畴威退铸绿疙背倡咀鸵坟偷旨计葵襟羹推嘻彩睬拧萤并稼崇保孕第三章类与对象第三章类与对象47终态finalFinal把相应的数据和方法设为常量,意味着一旦给定数值之后就不能再改变它们。final static int myChecksum = calculate();final Timestamp noon = new Timestamp(12, 00,00);final int universalAnswer = 42;毙笔嫡认悼圈骡狡偶玛叉襟够宠易巡扯竟遮谎肖艺摸期衡告片两樊蛤吗烧第三章类与对象第三章类与对象48final在类之前表示该类是最终类,不能再被继承。final在方法之前表示该方法是最终方法,该方法不能被任何派生的子类覆盖。final在变量之前表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。们址僵瞒佐郑娱糠臀冒精塞夕畴郎丙拷厂苯罕菇哇等燎嘻叠酵改稀禄斑闹第三章类与对象第三章类与对象49

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号