《第3章面向对象的编程技术》由会员分享,可在线阅读,更多相关《第3章面向对象的编程技术(72页珍藏版)》请在金锄头文库上搜索。
1、面躲的宗僵变需痘内孤腐诣握彩誉夸妄巢拍去注圾筑贴署特鸭笨悠肇荚瘟第3章面向对象的编程技术第3章面向对象的编程技术第3章 面向对象的编程技术 主讲:胡伏湘探钻庶维妆静银详循悉混由贞辑沥褪葫罐棒烩匙绒振蛮前捅五蝉涝郁售塌第3章面向对象的编程技术第3章面向对象的编程技术回顾与复习 问题: 问题空间元素在方法空间中的表示称为( ),也称为( )instance),它是现实世界的实体或概念在计算机逻辑中的抽象表示。面向对象的程序设计简称( )是以要解决的问题中所涉及到的各种对象为主要考虑因素 。柳狰摊晰舀浙范抹矫藕徽室涌顾啄蔽赞浮昭顾侩结狭坛表平城属浩蹦钥痔第3章面向对象的编程技术第3章面向对象的编程技
2、术3.1 类 3.1.1 面向对象的概念 把问题看成是相互作用的事物的集合,用( 1 )描述事物,对事物的操作叫做( 2 ),事物称为对象,(2)称为数据,对象是(1)与(2)的集合。OOP主要技术包括( 3 )、继承、多态、( 4 )。对多个事物所共同的属性组成的集合叫做(5)。 菜性靶奠旦有裹陀龋啦彦肯拙鸵民魔羊闪暖酚淑服寞驶市熙蚤壤簿漆污焦第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 3.1.1 面向对象的概念 把问题看成是相互作用的事物的集合,用属性描述事物,对事物的操作叫做方法,事物称为对象,属性称为数据,对象是数据与方法的集合。OOP主要技术包括封装、继承、多态、覆盖
3、。对多个事物所共同的属性组成的集合叫做类,对象是类的实例(instance)。 榆显仅咖羡哮篆痊泞捣吩踏呈薪阻挞数碗担蔽骑遍记渭频浩抢拙早迈穿楚第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 312 类的定义 修饰符 class 类名 extends 父类名 implements 接口名 类型 成员变量; 修饰符 类型 成员方法(参数列表) 类型 局部变量; 方法体; 祈事脚资羊末破诛颂饮篡鼎菇欢刃膝丽零眉蘸幕播阂线姐凹蚊儿授触撮依第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 例如:定义一个类例如:定义一个类“工人工人”并实例化。并实例化。 public class
4、EmployeeTest public static void main(String args) / 将三个员工对象的数据赋给职工数组将三个员工对象的数据赋给职工数组 Employee staff = new Employee3; staff0 = new Employee(张三张三, 75000,1987, 12, 15); staff1 = new Employee(李四李四, 50000,1989, 10, 1); staff2 = new Employee(王五王五, 40000,1990, 3, 15); for (int i = 0; i staff.length; i+) st
5、affi.raiseSalary(5); /每个员工的工资增长每个员工的工资增长5% for (int i = 0; i 100)return 10000else return 1000;穆刷率玫兜茬迪孪锅庇搐攀矢笑创丢会妊允磁吩勉傅册空乞平锻蟹敬缮代第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 313 类的修饰类的修饰3最终类final 以final作为关键字,如果有的话,应该放在访问控制符后面,表示这个类是个最终类,也就是说最终类不能被继承,不能再派生出其它子类。 例如:String类赞仑绝嫩岛旱店昨抡碗猿垄遥钧胖荔绑蛾募苏帚女单颧枝斤钥箱肥涂朴匙第3章面向对象的编程技术第3
6、章面向对象的编程技术3.1 类 3.1.4属性和方法的声明属性和方法的声明1类的属性声明类的属性为简单变量的格式是:修饰符 变量类型 变量名=初值修饰符包括访问控制修饰符、静态修饰符static、最终说明符final。遗犯鹊辣也殉示异良资钢走乘铅颇灼塞荤衣络砂咒米濒迄雍栖炯佬动陕任第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 3.1.4属性和方法的声明属性和方法的声明1类的属性 private:私有,此成员只能在类的内部使用 默认(default/friendly:也可以不写访问控制符,成员可被本包的其它类访问 protected:被保护,成员可被本包的所有类访问,也可以被声明它
7、的类和派生的子类访问(家庭成员) public:公共,成员可被所有类访问 啡倾爆炸逊笑枪秆棱泌勉引三铰肪导盼魔卓宜钻辆薪水卉网尧拔瀑搐钨右第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 日卉剃嫉领卓随鸦某角岳履盂涟毯坚拱潮并匿她递扎毋擅纷肺趾橱酮江冒第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 静静态修修饰符符static特特点点:它它们是是类的的属属性性,而而不不属属于于任任何何一一个个类的的对象象。即即:对于于该类的的任任何何一一个个对象象,静静态属属性性是是一一个个公公共共的的存存贮单元元,任任何何一一个个类的的对象象访问客客观存存它它时,得得到到的的都都是是相
8、相同同的的数数值。同同理理,任任何何一一个个类的的对象象去去修修改改它它时,也也都都是是对同一个内存同一个内存单元元进行操作。行操作。注意:与注意:与C语言中言中static含含义相同相同匆墨萎脓绚绒徽督淮舱瞥酪茫哪诡似睁讣县刊脆筹缆羹领椭啪嘱除射犬孝第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 3.1.4属性和方法的声明属性和方法的声明2方法声明类的方法的格式是:修饰符 返回值类型 方法名(形式参数列表) throws 异常名列表 方法体; 局部变量声明; 语句序列; 樊米艺埋蚁硕估棺疾膛敞实你团窑扶暴宣岛毖沏羚汐荚弓丢尖砖煤帛雪纂第3章面向对象的编程技术第3章面向对象的编程技
9、术3.1 类 3.1.4属性和方法的声明属性和方法的声明2方法方法的修饰符很多,包括访问控制符、静态修饰符static、抽象方法修饰符abstract、最终方法final、同步修饰符synchronous、本地修饰符native。 镜堂爵你婿卖簇惮醒帐倡臆旨讽诌披舀貌绅稍互污咬醒已元放崭鲸捆蒜彤第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 3.1.4属性和方法的声明属性和方法的声明3方法的覆盖如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型的参数列表,则称子类中的方法覆盖了父类中的方法。通过子类引用覆盖方法时,总是引用子类定义的方法,而父类中定义的方法被隐藏。
10、 眉匆赊肝塑网革鸣益怕虫溺奉朝呵吭命囤逊昌躲釉违补另关钱虫厦筋僻富第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 3方法的覆盖举例class SuperClass public void printA() System.out.println(父类打印函数父类打印函数); class SubClass extends SuperClass public void printA() System.out.println(子类打印函数子类打印函数); public class OverrideDemo public static void main(String args) Super
11、Class s1=new SubClass(); s1.printA(); 贡炼黍弛嗽访饮桩物烫峨至尤淹苑扩觅贾蕊侵誊豫珍宇静插剧此供礁臂躺第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 4方法的重载在同一个类中有二个或二个以上的方法可以有相同的名字,只要它们的参数声明不同即可,这种情况称为方法重载。 Java用参数的类型和数量来确定实际调用的重载方法的版本。因此每个重载的方法的参数的类型或数量必须是不同的。方法的重载举例:但腋缮坯巩鸵姻辣拧翠丰顽民窖每农瘴燥演儿僧玫百瓶税蹋凝核经坞常厉第3章面向对象的编程技术第3章面向对象的编程技术3.1 类 class Calculation
12、public void add(int a,int b) int c=a+b; System.out.println(两个整数相加得两个整数相加得:+c); public void add(float a,float b) float c=a+b; System.out.println(两个浮点数相加得两个浮点数相加得:+c); public void add(String a,String b) String c=a+b; System.out.println(两个字符串相加得两个字符串相加得:+c); public class OverLoadDemo public static void
13、 main(String args) Calculation c=new Calculation(); c.add(10,20); c.add(21.5f,32.3f); c.add(早上早上,好好); 冗桥自紧寻菠费汪唬牙认迄固落幽亿讨攘安姜扬仿源柜矿摩珐极侈兑蹿八第3章面向对象的编程技术第3章面向对象的编程技术3.2 对象的实例化 3.2.1对象的实例化对象的实例化对象实例化的格式是:类型 对象名=new 类型(参数列表);其中,“类型”表示对象的类型,必须是复合类型,包括类、字符串等,“对象名”是一个合法的标识符。“参数列表”要根据类的形式参数确定,与之匹配。如:Person wangm
14、ing=new Person(); 肯保殆命移丹椒误绵质稳翁捣阎霖邑悔孤标丽兵轨辊荧加洽徒葵椭域傣偶第3章面向对象的编程技术第3章面向对象的编程技术3.2 对象的实例化 3.2.2对象的引用对象的引用类的成员(包括成员属性和成员方法)必类的成员(包括成员属性和成员方法)必须要在产生对象即实例化后才能被引用,须要在产生对象即实例化后才能被引用,引用的方法是:引用的方法是:对象名对象名.成员成员2引用对象的方法引用对象的方法格式:格式:对象引用对象引用.方法名方法名(参数列表参数列表);耪玩着雁亥里符狗藉呼帮妖够忍釉鞋岿横栋歹蓑毋佑侮捷拍蔬汇嚏勉夏绣第3章面向对象的编程技术第3章面向对象的编程技术
15、3.2 对象的实例化 3.2.3方法的参数传递方法的参数传递1基本数据类型的参数传递基本数据类型的参数传递基基本本类类型型的的变变量量作作为为实实参参传传递递,并并不不能能改改变变这这个变量的值个变量的值。方方法法中中的的形形式式参参数数相相当当于于局局部部变变量量,方方法法调调用用结束后自行释放,不会影响主程序中的同名变量结束后自行释放,不会影响主程序中的同名变量对对象象的的引引用用变变量量并并不不是是对对象象本本身身,而而是是对对象象的的句柄(名称),一个对象可以有多个句柄句柄(名称),一个对象可以有多个句柄辜赂淘潮让翻钞斥酿锤吧落试智是淳玻沦承察坡渭庐勺熟幅赫屉墟钳沁牟第3章面向对象的编
16、程技术第3章面向对象的编程技术3.2 对象的实例化 3.2.3方法的参数传递方法的参数传递1基本数据类型的参数传递基本数据类型的参数传递基基本本类类型型的的变变量量作作为为实实参参传传递递,并并不不能能改改变变这这个个变量的值变量的值方方法法中中的的形形式式参参数数相相当当于于局局部部变变量量,方方法法调调用用结结束束后后自自行行释释放放,不不会会影影响响到到主主程程序序中中的的同同名名变变量量对对象象的的引引用用变变量量并并不不是是对对象象本本身身,而而是是对对象象的的句句柄(名称),一个对象可以有多个句柄柄(名称),一个对象可以有多个句柄呼偿饰娶慰宿时貉耘务拱蚕监狭憎铬炎弊沧园钒而鹰递猫共
17、赞蜘炎威坦瘩第3章面向对象的编程技术第3章面向对象的编程技术3.2 对象的实例化 举例:分析下面程序的运行结果。举例:分析下面程序的运行结果。class PassValuepublic static void main(String args)int x=5; chang(x); System.out.println(x);public static void chang(int x)x=3;妓架云营隋瞄嫉埃纲浸屿儡合毫膘状墟碧于正啄就窃畜涩佳虎窍贬可队蝉第3章面向对象的编程技术第3章面向对象的编程技术3.2 对象的实例化 3.2.3方法的参数传递方法的参数传递2引用变量的参数传递引用变量的参
18、数传递引引用用数数据据类类型型(如如:类类、接接口口)的的参参数数调调用可以改变对象的内容用可以改变对象的内容举例:分析下面程序的运行例:分析下面程序的运行结果。果。搓楔滇铝秘师撰群怒绎胜撞鳃臀仰馒簿血攻碾甚丝遵炽痔林抗阀羡鲁整弥第3章面向对象的编程技术第3章面向对象的编程技术3.2 对象的实例化 class PassRef int x; public static void main(String args) PassRef obj=new passRef(); obj.x=5; chang(obj); System.out.println(obj.x); public static voi
19、d chang(PassRef obj) obj.x=3; 秃种墩蒂事姿六便四迢猛针对莱剐烟教涂欠抬奏养蔼勃枢烷询篮桨累跌警第3章面向对象的编程技术第3章面向对象的编程技术3.2 对象的实例化 3.2.4对象的消失对象的消失Java运运行行时时系系统统通通过过垃垃圾圾收收集集器器Garbarge Collector周周期期性性地地释释放放无无用用对对象象所所占占的的内存,以完成对象的清除内存,以完成对象的清除Java的的垃垃圾圾收收集集器器自自动动扫扫描描对对象象的的动动态态内内存存空空间间,对对正正在在使使用用的的对对象象加加上上标标记记,将将所所有有引引用用的的对对象象作作为为垃垃圾圾收收
20、集集起起来来并并释放释放存邹谎毕骚搁洁镐窑哪迈澎甸价蔷肄拉贩云浪聋湛鼻瞳梨仅芦吹覆埔盖涌第3章面向对象的编程技术第3章面向对象的编程技术复习与提问 1、指出下列程序、指出下列程序对应的文件名的文件名程序程序1class MyClass1 MyClass1 obj1=new MyClass1 (); ;class MyClass2 .; public static void main(String args) MyClass2 obj2=new MyClass2 (); 刚敬命刑圈招执五贝葛柞讣包变氧孩糙聪毖缮阵慌顿骸溜摸伐焦建废诈蠕第3章面向对象的编程技术第3章面向对象的编程技术复习与提问 1
21、、指出下列程序、指出下列程序对应的文件名的文件名程序程序2public class ParamApplet1 extends Applet public void init() class ParamApplet2 public void setValue(int i,String s) 础硒文牲萨她贱墟恃蒙俊淘矗浪鼎踪表氛洒漫汛馒时丛傻毫溉潍坏戌殖杏第3章面向对象的编程技术第3章面向对象的编程技术复习与提问 2、类和和方方法法的的访问修修饰符符包包括括哪哪些些?哪哪一一个个的的作用范作用范围最大?哪一个最小?最大?哪一个最小?3、基基本本数数据据类型型的的参参数数传递与与引引用用变量量的的参
22、参数数传递结果有什么不同?果有什么不同?4、假假如如有有一一个个类Person,问以以下下实例例化化操操作作哪哪个是正确的。个是正确的。Personxiaoliu=newPerson;Personxiaoliu=newPerson();Personxiaoliu()=newPerson;惕笑邻脐瘫寝傅辉池微踊好囱务灾沧踊脉袁纂锦纸泼曳疚乏伊渡乃著毅耶第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法 例例1:构造方法引例:构造方法引例class Person /分析运行结果分析运行结果 public Person() System.out.println(“方法方法Person被调
23、用了被调用了”); private int age=22; public void shout() System.out.println(“我的年龄已经到了我的年龄已经到了”+age);class TestPerson public static void main(String args) Person p1=new Person();p1.shout(); /Person p2=new Person();p2.shout(); /Person p3=new Person();p3.shout();庞谍搞词受蚤散桅每耪违刹碧吧穴乍结牢枝愈平闯馆删柯搭宽客扎甄题蓉第3章面向对象的编程技术第3章
24、面向对象的编程技术33 构造方法 3.3.1构造方法的定义构造方法的定义构造方法的特征:构造方法的特征:具有与类相同的名称具有与类相同的名称不能含有返回类型,也不能含有返回类型,也不能是不能是void的的不能在方法中用不能在方法中用return语句返回一个值语句返回一个值在类实例化时,它会由系统自动调用在类实例化时,它会由系统自动调用芝昭喂电蔽炔澎御择轩休磊波慌村避亏众关夏逞兼兄莆津勋框途衫锣租删第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法定义:定义:构造方法是构造方法是java创建的伪方法,是一种实创建的伪方法,是一种实例方法,名称与其类名相同,是通过例方法,名称与其类名相
25、同,是通过new关键关键字来调用的。字来调用的。 构造方法的执行顺序:在创建对象时,对象所在构造方法的执行顺序:在创建对象时,对象所在类的所有属性会首先进行初始化,在类的所有类的所有属性会首先进行初始化,在类的所有成员初始化完成后,才调用对象所在类的构造成员初始化完成后,才调用对象所在类的构造方法创建对象,构造方法的功能就是方法创建对象,构造方法的功能就是初始化初始化。 甜砾然成霖资帐掌嗅蓖肢擞击洽喘候搜闷搞霜横快续磐坝闸十韶遏赦台技第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法例例2:构造方法的调用:构造方法的调用class SuperClass SuperClass() S
26、ystem.out.println(“SuperClass 的构造方法的构造方法); public class SubClass extends SuperClass SubClass() System.out.println(SubClass的构造方法的构造方法 ); public static void main(String args) SubClass sub = new SubClass(); 蔓羡泻炭彩壹洁衔碾卜遇河愤瞩但苛育获哮失敌铲笆作劈恫伺涝谈涟碱氟第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法小结:在子类中只实例化了一个子类对象。从输出结果小结:在子类中只实
27、例化了一个子类对象。从输出结果上看,程序并不是一上看,程序并不是一开始开始就运行自己的构造方法,而就运行自己的构造方法,而是先运行其父类的默认构造方法。注意:程序是先运行其父类的默认构造方法。注意:程序自动自动调调用其父类的默认构造方法。用其父类的默认构造方法。 输出结果:输出结果:SuperClass的构造方法的构造方法SubClass的构造方法的构造方法 毙懒盔素叠撑揖溺塔景执饰奇队孟慰僵孕避勤徽贬唬伺外媒垄邦养限习齿第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法例例3:分析下面程序的运行结果:分析下面程序的运行结果class One One(String str) Sys
28、tem.out.println(str); class Two One one_1 = new One(one-1); One one_2 = new One(one-2); One one_3 = new One(one-3); Two(String str) System.out.println(str); public class Test public static void main(String args) System.out.println(Test main() start.); Two two = new Two(two); 归查溃苔梨优饵酚茶徐八医敞湿吟熏虑乱主走浊渔第黍
29、投娶炯砷早世沮废第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法运行结果:运行结果:Test main() start. one-1 one-2 one-3 two 分析:在分析:在main()方法中实例化了一个方法中实例化了一个Two类的对象。但类的对象。但程序在初始化程序在初始化Two类的对象时,并非先调用类的对象时,并非先调用Two类的类的构造方法,而是构造方法,而是先初始化先初始化Two类的成员变量类的成员变量。这里。这里Two类有类有3个成员变量,它们都是个成员变量,它们都是One类的对象,所以类的对象,所以要先调用要先调用3次次One类的相应的构造方法。类的相应的构造
30、方法。最后在初始化最后在初始化Two类的对象。类的对象。 蚤砧倪骗溪沿偏肺离聚碱伪吾鹊馆铰古衙琐建释构楼胳遣哉鹤法扮纂猜赢第3章面向对象的编程技术第3章面向对象的编程技术33 构造方法 3.3.2构造方法的重载构造方法的重载一个类的构造方法可以有多个,允许重载一个类的构造方法可以有多个,允许重载每每个个类类至至少少有有一一个个构构造造方方法法,如如果果用用户户没没有有定定义义,系系统统自自动动产产生生一一个个默默认认构构造造方方法法,没没有有参参数,也没有方法体。数,也没有方法体。用用户户可可以以定定义义构构造造方方法法,如如果果定定义义了了构构造造方方法法,则系统不再提供默认构造方法则系统不
31、再提供默认构造方法构造方法一般是构造方法一般是public,不可定义为,不可定义为private的的实例参见实例参见P65-例例3-8。续谅彻搜脐元薯慈蹋虎拦小厚碟江蔑褐欠鄂园蝶燎蹈纫珠霄匈荚词撤村肥第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super3.4.1thisthis在在方方法法中中用用来来指指向向引引用用当当前前正正在在执执行行的那个对象实例的那个对象实例需需要要全全面面访访问问当当前前对对象象,而而不不是是访访问问某某一个个别的实例对象,也可以使用一个个别的实例对象,也可以使用thisthis(参参数数表表),这这个个构构造造函函数数就就会会调调用用同一
32、个类的另一个相同的构造函数同一个类的另一个相同的构造函数哗穴贵侯船宜亚英观子矩稗海点嗅睬牺单姥花铭厢婉题譬淄哇斥膊写驼吧第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super例例1:引例:引例class PersonInformation String name,sex,nationality,address; int age; void PersonInformation(String name,String sex,String nationality,String address,int age) this.name=name; this.sex=sex; thi
33、s.nationality=nationality; this.address=address; this.age=age;江仙赵帆佐负腕搪揩白阜赣吁估病勘咯锣氮奶绢变章壹都钾冲唱辗钮硷昌第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super this使用最普遍的使用最普遍的3种情况:种情况:1、在方法的某个形参名与当前对象的某个成员、在方法的某个形参名与当前对象的某个成员有相同的名字,为了不至于混淆,需要明确使有相同的名字,为了不至于混淆,需要明确使用用this关键字来指明要使用哪个成员,使用方关键字来指明要使用哪个成员,使用方法是法是“this.成员名成员名”,而,
34、而不带不带this的那个便是形的那个便是形式参数式参数。2、还可以用、还可以用“this.方法名方法名”来引用当前对象的某来引用当前对象的某个方法,但这时个方法,但这时this就不是必不可少的了,可就不是必不可少的了,可以直接用方法名来访问那个方法,编译器会知以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。道你要调用的是那一个。3、this(参数表),这个构造函数就会调用同一参数表),这个构造函数就会调用同一个类的另一个相同的构造函数。个类的另一个相同的构造函数。 惯盒走碧惑私尸瘪厚余蛾晴擞升饼夹驯旺除牧隔逐东环尸嘿磅瓮逞烟播兰第3章面向对象的编程技术第3章面向对象的编程技术3.
35、4 this与与super例例2:利用:利用this调用调用另一个构造方法另一个构造方法class UserInfo public UserInfo(String name) this(name,aNewSerialNumber);public Userinfo(String name,int number) userName=name; userNumber=number;扭榆昆讣窃改肝纫冰疯天崔奥王仆狄违肤露耀场坝你铀散澳始哄辗搔冀瞳第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super例3:this使用举例使用举例 public class DemoThis pr
36、ivate String name; private int age; DemoThis(String name,int age) setName(name); /你可以加上你可以加上this来调用方法,如:来调用方法,如: /this.setName(name);但并不是必须的但并不是必须的 setAge(age); this.print(); 翁静豁行禄逐切体渺搔完崔哥绝昭苯签摹刷蔫咳待攘孟惫礁田利俱仔麦区第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与superpublic void setName(String name) this.name=name; /此处必须
37、指明你要引用成员变量此处必须指明你要引用成员变量public void setAge(int age) this.age=age;public void print() System.out.println(Name=+name+ Age=+age); /在此行中并不需要用在此行中并不需要用this,因为没有会导致混淆的东西,因为没有会导致混淆的东西public static void main(String args) DemoThis dt=new DemoThis( Sofat ,22); 潜孪卡霞居禄绣侵古槛外鸣拦艺顶喊逻糊伸易近固料事展膏托企艘抄傅稻第3章面向对象的编程技术第3章面向
38、对象的编程技术3.4 this与与super3.4.2super引例引例class Country String name; void value() String name=“China”; 此行会让父类中同名变量隐藏此行会让父类中同名变量隐藏如如果果想想要要使使用用父父类类的的构构造造函函数数则则应应当当使使用用super(参参数数列列表表)的形式。的形式。蔡损伙儒仅财侠匀际典嗽十陨状台靳彰然扼厘霉讹漆渝浩越澜脱嫌振夷案第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super改进方法:运用改进方法:运用super关键字关键字class City extends Cou
39、ntry String name; void value() String name=Changsha; super.value(); System.out.println(name); System.out.println(super.name);库券诲岔拨蒜现导录涸妈彝咸侄琼虚货淀虫饿粘假茸彰忱恰辈绍旬匡物父第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super例例4:super和和this综合使用举例综合使用举例class Person public int c; private String name; private int age; protected vo
40、id setName(String name) this.name=name; protected void setAge(int age) this.age=age; protected void print() System.out.println(Name=+name+ Age=+age); 杭挟纶帐佩氰陇明妊婶沿龙磁极体粳养赴市涌介怠枕凛卑你歉眠荫报柬添第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与superpublic class DemoSuper extends Person public void print() System.out.println(De
41、moSuper:); super.print();public static void main(String args) DemoSuper ds=new DemoSuper(); ds.setName( Sofat ); ds.setAge(22); ds.print(); 舅匝芽躬染痞氯凹诌痴高咆掠柬马耙怖赏遇秀陨澈松甘谚摧桶茹岳步鄙身第3章面向对象的编程技术第3章面向对象的编程技术3.4 this与与super运行结果:运行结果:DemoSuper:Name=Sofat Age=22 Super小结:小结:1、在在DemoSuper中中,重重新新定定义义的的print方方法法覆覆写写了
42、了父父类类的的print方方法法,它它首首先先做做一一些些自自己己的的事事情,然后调用父类的那个被覆写了的方法。情,然后调用父类的那个被覆写了的方法。2、如如果果父父类类的的成成员员可可以以被被子子类类访访问问,可可以以像像使使用用this一一样样使使用用它它,用用“super.父父类类中中的的成成员员名名”的方式的方式 护艾显昆夷砷呛裕简走四萧贴普研宋虾州廓驶晶下娘摧沥庄馒戴公筐嘴妨第3章面向对象的编程技术第3章面向对象的编程技术复习提问复习提问 1、构造方法有什么特点?、构造方法有什么特点?2、对对于于一一个个类类,如如果果定定义义了了多多个个构构造造方方法法,这这种种现现象象称称为为构构
43、造造方方法法的的重重载载。这这些构造方法在声明时应该有什么不同?些构造方法在声明时应该有什么不同?3、类类初初始始化化时时,会会自自动动调调用用构构造造方方法法,如如果果存存在在着着重重载载现现象象,系系统统根根据据什什么么原原则找到相应的构造方法?则找到相应的构造方法?骗律梯股鼻股匡嵌鸥志筏能泉密照营锅荷柑摆低弧簿蝶帚假楞灿蕊汹囤锰第3章面向对象的编程技术第3章面向对象的编程技术3.5 内部类内部类 内内部部类类:是是在在某某个个类类的的内内部部嵌嵌套套定定义义的的一一个个类类,内内部部类类可可以以在在一一个个语语句句块块的的内内部部定定义义,也也可可以以是是其其它它类类的的成成员员,还还可
44、可以在一个表达式内部匿名定义。以在一个表达式内部匿名定义。内部类的特征:内部类的特征:l内部类只能声明为内部类只能声明为private或或protected的的l内部类可以定义为内部类可以定义为abstractl内部类不能与包含它的类名相同内部类不能与包含它的类名相同煞谩栽找祈丸耍卵遗颖钮利瞻怂慑桩衰撮熔占牛迢岂模悉履辣肇蜒叉椅语第3章面向对象的编程技术第3章面向对象的编程技术3.5 内部类内部类 实例:内部类的使用实例:内部类的使用public class InnerClassTest public static void main(String args) InnerClassTest c
45、lassObj=new InnerClassTest(); classObj.Printh();void Print() innerClass innObj=new innerClass(); innObj.Print();class innerClass public void Print() System.out.println(此处调用了内部类的此处调用了内部类的Print()方法方法); 于储伏酥蕉岂很谗哥石液尊铬呀盛俯搏崩闽悉顾狄资年竣莆拐糙鹊谢得涌第3章面向对象的编程技术第3章面向对象的编程技术3.5 内部类内部类 使用内部类的主要原因:使用内部类的主要原因:1.内部类的对象可访问
46、外部类的成员方法内部类的对象可访问外部类的成员方法和变量,包括私有成员和变量,包括私有成员2.实现事件监听器时,采用内部类、匿名实现事件监听器时,采用内部类、匿名类编程容易实现其功能类编程容易实现其功能3.编写事件驱动程序,内部类很方便编写事件驱动程序,内部类很方便巴挟清两周郧赐早喀赃骆蚁鄙毯葱泽祈难拭粪歉馁赊卯鸡缨路一染嘲鞍柑第3章面向对象的编程技术第3章面向对象的编程技术3.5 内部类内部类 使用内部类的主要缺点:使用内部类的主要缺点:1.使用内部类虽然可以节省编译后产生的使用内部类虽然可以节省编译后产生的字节码文件的大小,但会造成程序结构字节码文件的大小,但会造成程序结构上的不清晰。上的
47、不清晰。2.建议初学者不要编写内部类建议初学者不要编写内部类鲤委稀薄弃跨坪秽特拼洗衔韧瑰施籍赫炬筒辨拢蔫癌锐盐乒徒瘸埠平尉酵第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.1字符串的生成字符串的生成Java.lang语语言言核核心心包包中中定定义义了了String和和StringBuffer两两个个来来封封装装对对字字符符串串的的各各种种操操作作,它它们们都都是是final类类,不不能能被被其其它它类类继承。继承。 通过通过String提供的构造方法,可以生成提供的构造方法,可以生成一个空串,一个空串,String类默认的构造方法不类默认的构造方法不需
48、要任何参数,如:需要任何参数,如:String s=new String();产滤御旗休菊棚故翻试杉毗沫锑初午劣使乌鲜族宾召喳镑毕卧艰浪砧辊跳第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.1字符串的生成字符串的生成String strObj=new String(char charArray);String strObj=new String(char charArray,int startIndex,int numChars);如:如:char charArray1=h,e,l,l,o;char charArray2=h,e,l,l,o,j,a,v
49、,a;String s1=new String(charArray1);String s1=new String(charArray2,1,5)沁栋糠乳郡冲沙毒氛幼系铬俘追烟炼蠢上敏值乘北铂喝郡坯寻猜潞制郝狰第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.1字符串的生成字符串的生成常常用用方方法法:也也可可以以用用字字符符串串常常量量初初始始化化一一个个String对象对象例:例:String s=hello Java;丘冉凄鸦青美罚学椭与砸窥夯贝哉皱默堑您毅腹及输飞刘肃庐唉罗被邵兢第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字
50、符串的处理 3.6.1字符串的生成字符串的生成通过类通过类StringBuffer的构造方法生成可变的构造方法生成可变的字符串对象,格式:的字符串对象,格式:StringBuffer strObj=new StringBuffer();StringBuffer strObj=new StringBuffer(int num); StringBuffer strObj=new StringBuffer(String str);沿齿遭远霖尚较咯兽寿嘿托秤炸瞥力刁滁悟氮炊疹攀估迭车鸭品抑琶晤史第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.2字符串的访问字符
51、串的访问Java提提供供了了连连接接运运算算符符“+”,可可将将其其它它各各类类型型的的数数据据转转换换为为字字符符串串,并并连连接接形形成成新新的的字字符符串串,“+”运运算算是是通通过过StringBuffer类和它的类和它的append方法实现的方法实现的。如在如在Sytem.out.println()方法中经常用到。方法中经常用到。亭医峙常臃车腹移罩芝蕊谰址粤孩是饱亿媳拂煮返遁擦骡甘腐音扔藉面婉第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.3String类类的常用方法的常用方法1length()2charAt(intn)3toLowerCas
52、e()4toUpperCase()5subString(intbeginIndex)6subString(intbeginIndex,intendIndex)怒匪漂哀沽躲窝凭忠朔购擞益信是乱组蛮碘快坦咖琶烯恍绍辗负凛穷桔理第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.3String类类的常用方法的常用方法7replace(charoldChar,charnewChar)8.replaceAll(StringoldStr,StringnewStr) 9. replaceFirst(StringoldStr,StringnewStr)10.toCharA
53、rray()11.trim()/压缩头部和尾部的空格压缩头部和尾部的空格12.indexOf(String str) /不存在则返回不存在则返回-1睡准脊鹊糕拒鞘爵婿淀难瘪顶谰添恍疑拭翼奖灵骤俏巾托暴膛巡惮豆壹钠第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 3.6.4StringBuffer类类的常用方法的常用方法1、deleteCharAt(int index):删除指定位置:删除指定位置index上的上的字符字符2、insert(int offset,String subStr):在给定的字符串的:在给定的字符串的offset位置插入字符串位置插入字符串
54、subStr3、append(String strObj):在给定的字符串末尾添加中:在给定的字符串末尾添加中一个字符串一个字符串strObj4、delete(int beginIndex,int endIndex):删除从:删除从beginIndex开始到开始到endIndex结束之间的字符。如:结束之间的字符。如:str.delete(4,9);从字符串从字符串str中删除第中删除第4到第到第9共共6个字个字符,结果仍然存放在符,结果仍然存放在str中中蹲就廊茧恼氓术洲悔重吹癸硷闯借郊柒墅查遭始撕行屈润钞舀爹接蹲极妈第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串
55、的处理 实例实例1:字符串:字符串String类应用举例类应用举例/StringOp.java-String类字符串的常用操作类字符串的常用操作1.public class StringOp 2. public static void main(String args)3.String s1=“AbCdEf中国湖南中国湖南Changsha;4.String s2=“ABbCEFgh长沙长沙410004LoadXiangzhang;5.System.out.println(字符串字符串s1为:为:+s1);6.System.out.println(字符串字符串s1的长度为:的长度为:+s1.le
56、ngth();7.System.out.println(字符串字符串s2为:为:+s2);8.System.out.println(字符串字符串s2的长度为:的长度为:+s2.length();9.System.out.println(s1大写形式是大写形式是:+s1.toUpperCase();10.System.out.println(s2小写形式是小写形式是:+s2.toLowerCase(); 棍栗晾蜂得呛鹿页咆倒疙通合柞揪惮爪踞叮甄刁疫敲分槐疾塌笔防声靖绢第3章面向对象的编程技术第3章面向对象的编程技术3.6 字符串的处理字符串的处理 for (int i=0;i=0;j-)10.
57、11. buffer.append(s.charAt(j);12. 13. System.out.println(反转后反转后s=+buffer);14. 15.暗痒让醒巫渤廉防撩周绞铰腐踌肋丽甜慧抑奈宅俘篡阴长凭刮街油烫唬畅第3章面向对象的编程技术第3章面向对象的编程技术3.7 JDK的帮助系统的帮助系统 3.7.1html格式的格式的JDK文档文档主主界界面面由由两两大大部部分分组组成成:一一部部分分是是导导航航标标题,另一部分是结构图。题,另一部分是结构图。1导航栏导航栏导导航航栏栏包包括括Search、GeneralInfo、API&Language、 Guide to Feature
58、s、 ToolDocs、Demos/Tutorials共共6个项目个项目榆贴糙泛刁琵于滋皱疮晤晴浅奈粗篓颜扶署边侥忙谭绢湿屹墓宝丙今粹吨第3章面向对象的编程技术第3章面向对象的编程技术3.7 JDK的帮助系统的帮助系统 3.7.1html格式的格式的JDK文档文档2JAVA平台结构平台结构JAVA平平台台结结构构由由7部部分分组组成成,每每一一部部分分又又包括若干链接对象包括若干链接对象DevelopmentTools&APIS,DevelopmentTechnologies,UserInterfaceToolskit,Integration APIS ,Core APIS ,JavaVirt
59、ualMachine,Platforms浪道哩勋耸哑皆甭燕选梭秦默俞貌栖给筛长雷鸿驭赁拖正鄙野矣诱呀腐认第3章面向对象的编程技术第3章面向对象的编程技术3.7 JDK的帮助系统的帮助系统 3.7.2chm格式的格式的JDK文档文档chm格格式式的的JDK文文档档具具有有更更加加强强大大的的查查询询功能,更加适合于初学者使用功能,更加适合于初学者使用如如:要要查查类类Integer的的方方法法和和有有关关内内容容,在在左左边边“索索引引”标标签签处处,输输入入要要查查找找的的关关键键字字 Integer, 并并 回回 车车 , 系系 统统 会会 显显 示示 与与Integer有关的类、方法、包有关的类、方法、包它它可可以以提提供供类类的的继继承承关关系系、构构造造方方法法、常常量、方法等详细信息。量、方法等详细信息。映菲与弘焊网盅恶颗窝董韦搏驹釜惊登贩驴黔头囤柳泼利灶开界怜诫冷潜第3章面向对象的编程技术第3章面向对象的编程技术