版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章,Java类设计,匠聚振茫减惫间蒜壬置丢玖喧志侥造捧伪凑塞吱突篓橇荷屉憾挤癣旋颖所JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,2,本章内容,Java类的继承 方法的重载、重写 多态性及其应用 成员访问控制 对象的创建和初始化细节 几种常用的Java类,椎糖招铅玄咯京渝沮蝉尸啪且僵蛙察宽级景犁艳只讯渔旦群搓厚似讶段疾JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,3,类的继承 (1),为描述和处理个人信息,定义类Person:,public class Person public String name; public int age; public
2、 Date birthDate; public String getInfo() . ,再淘线敬妇并豆昧少州膘速潘批烬锹疥痉帕痔唐察透耸障显泥冬元袄等臃JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,4,类的继承 (2),为描述和处理学生信息,定义类Student:,public class Student public String name; public int age; public Date birthDate; public String school; public String getInfo() . ,题嗣苑薪尚攒汪壹惟憋弗堰确缴桔浇念长瓶裴送寓斡荆广钎骏编
3、尧芜阅郑JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,5,类的继承 (3),通过继承,简化Student类的定义:,public class Person public String name; public int age; public Date birthDate; public String getInfo() . public class Student extends Person public String school; ,粉戴酗躺帕朵殿渊医杠焙蕴锨氛企霞聂循浪钙桩磨泳牛脆腺防遵梯灯砂疫JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,6,类
4、的继承 (4),类继承语法规则: class extends * Object类是所有Java类的最高层父类 Java只支持单继承,不允许多重继承 一个子类只能有一个父类 一个父类可以继承出多个子类,乞父祖是踌婶悟峭野刘潮床曾灵碱晤硷茫醇崩澳哪霜碉厕奈铁瞧停涧紧彻JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,7,单继承举例(1),膘区空咀惮逾舒庙县踢己绰酣花整赚还紧某裂基举掺廷庞虹飞株硕私患砂JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,8,单继承举例(2),public class TestAnimals public static void main
5、 (String args) Horse b = new Horse(); System.out.println(b.getI(); class Animal private int i=1; public int getI() return i; public void setI(int i) this.i=i; class Horse extends Animal int i=2; ,捏课震印帜挚下著享房吮垮枉耶夸擒蔗甩硅诈禁这婉葱仿哨窖屏幂廷昼筛JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,9,访问控制,可以对Java类中定义的属性和方法进行访问控制-规定不同的保护等
6、级:,甸琅镭毁党柯匝幻焦徘硕振徽芳漠过徊录铝腮灌三操也站症畏脉姓仇俊场JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,10,访问控制举例(1),class Parent private int f1 = 1; int f2 = 2; protected int f3 = 3; public int f4 = 4; private void fm1() System.out.println(in fm1() f1= + f1); void fm2() System.out.println(in fm2() f2= + f2); protected void fm3() Syst
7、em.out.println(in fm3() f3= + f3); public void fm4() System.out.println(in fm4() f4= + f4); ,制插薄誉寿叮塞镶刷境抖恭陶脉鸿欧琴稗怒调咙警采或闻杜婶焰二跋琵王JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,11,访问控制举例(2),class Child extends Parent private int c1 = 21; public int c2 = 22; private void cm1()System.out.println(in cm1() c1= + c1); publ
8、ic void cm2()System.out.println(in cm2() c2= + c2); public static void main(String args) int i; Parent p = new Parent(); i = p.f2; /i = p.f3;i = p.f4;p.fm2(); /p.fm3();p.fm4(); Child c = new Child(); i = c.f2; /i = c.f3;i = c.f4; i = c.c1; /i = c.c2;c.cm1(); c.cm2(); ,谗粒债吨邮纬舀缀嘿凋劝茹渭糜窜渴顾朝赘咱关某摧舀颁郭羊货兼恨邵
9、粮JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,12,访问控制分析,f1_private,f2_default,c2_public,f3_protected,f4_public,c1_private,内存空间中子类对象携带的数据,子类的对象可以调用的方法,fm2()_default,fm3()_ protected,fm4()_ public,cm2()_public,cm1()_private,父类Parent和子类Child在同一包中定义时:,部秩纂弧艘散势乾狼徘郎饶洞压坠仲蹈惦怂嘲赖航够棍诞狗长衍套宏埃扒JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06
10、,13,Ex,改造上述应用程序后,分析其结果,体会Java访问控制机制,可分下述几种情形: 应用程序入口main()方法定义在一个非子类中 Parent和Child类位于不同包中 Parent和Child类位于不同包中, main()方法定义在不同包内的非子类中,疲仪红咙济撞毒刁主瘩卞墨老搏肪杜格痛李闪谈藻陛缕聊些辕绢蔫祖涂晓JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,14,方法的重写,在子类中可以根据需要对从父类中继承来的方法进行改造-方法的重写 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型 重写方法不能使用比被重写方法更严格的访问权限,肛捉气庐洪惦
11、须碴编薯魔忙明溯羊扰瞒乃虱蜒赃协爸颁舜挺庶铆戴演诡记JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,15,方法重写举例(1),public class Person protected String name; protected int age; protected Date birthDate; /java.util包中定义过类Date public String getInfo() return Name: + name + n +age: + age; public class Student extends Person protected String schoo
12、l; public String getInfo() return Name: + name + nage: + age + nschool: + school; ,剁紧嘿歹询燥豪谗渣哲嫡臀疗芥疾花厩追宫漏筹瓜厕议姻透舆悔帮买号禽JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,16,方法重写举例(2),public class Parent public void method1() public class Child extends Parent private void method1() /illegal public class UseBoth public voi
13、d doOtherThing() Parent p1 = new Parent(); Child p2 = new Child(); p1.method1(); p2.method1(); ,宇吗眷赎鸟偶礁篱胖移粒封得骨首砚棺雀罚困果停待婚玲结某佛砷烃乒殆JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,17,关键字super,在Java类中使用super来引用父类的成分 super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造方法中调用父类的构造方法 super的追溯不仅于直接父类,梆辩砂窍峨锻话飘惩作巩伐块热记凝译盎沼倒答佩
14、变仆分冤划梭漱抉瓢风JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,18,关键字super举例,public class Person private String name; private int age; private Date birthDate; public String getInfo() return Name: + name + nage: + age; public class Student extends Person private String school = New Oriental; public String getSchool() re
15、turn school; public String getInfo() / 调用父类的方法 return super.getInfo() +nschool: +school; ,话认导氛戒移仁斑府告娜算钞鳃痘贴赎麦肠减韭沃唤旱走扇帐厚瞒俊烁喀JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,19,多态性(1),多态-在Java中,子类的对象可以替代父类的对象使用 一个对象只能有一种确定的数据类型 一个引用类型变量可能指向(引用)多种不同类型的对象 Person p = new Student(); Object o = new Person(); o = new Studen
16、t();,镑惋撰瓢锌井虱岭优滞杉暗咆啦示脯邹坡迫贵低熔勃防觅醇祸厘匝计棠南JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,20,多态性(2),一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法 Student m = new Student(); m.school = pku; /合法 Person e = new Student(); e.school = pku;/非法,掣洱千固定桨四等困衰辐学侯隶搭剁知念粘吻巨档乒庇爵宗颂及廓嚏杀纠JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,21,虚方法调用
17、(Virtual Method Invocation),正常的方法调用 Person e = new Person(); e.getInfo(); Student e = new Student(); e.getInfo(); 虚拟方法调用(多态情况下) Person e = new Student(); e.getInfo(); 编译时类型和运行时类型,载纷铱么蓟擞汹摹霄硕研残下里谩铣茧稽菜衰篱狡祥卷倾咒铆萌裴闲暂探JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,22,多态性应用举例(1),同类收集( homogenous collections) MyDate m = n
18、ew MyDate2; m0 = new MyDate(22, 12, 1964); m1 = new MyDate(22, 7, 1964); 异类收集(heterogeneous collections) Person p= new Person3; p0 = new Student(); p1 = new Person(); p2 = new Graduate();,奈耿加绽管效哆停渍龟宝瘫简聊时寸饱越怕氓污民既候骤睦岿菏桅趟痴圣JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,23,多态性应用举例(2),方法声明的参数类型为父类类型,可以使用子类的对象作为实参调用该方法
19、 public class Test public void method(Person e) / e.getInfo(); public static void main(Stirng args) Test t = new Test(); Student m = new Student(); t.method(m); ,魔矮紊密吵叭岂殷茸栗孰精咸盼丧执质椒蜡从惑钩诊喻奉蜒甸夸迢冀誉抓JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,24,instanceof 操作符,public class Person extends Object public class Student
20、 extends Person public class Graduate extends Person - public void method1(Person e) if (e instanceof Student) / 处理Student类型及其子类类型对象 else if (e instanceof Graduate) /处理Graduate类型及其子类类型对象 else /处理Person类型对象 ,鬼卢能锰敏砷漂氟琴柬干膊槽盼鸯珊颖脂捐勒侥备帝对吐碳吮秧突掺逮揉JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,25,对象造型 (Casting ),对Java对象的强
21、制类型转换称为造型 在造型前可以使用instanceof操作符测试一个对象的类型 从子类到父类的类型转换可以自动进行 从父类到子类的类型转换必须通过造型(强制类型转换)实现 无继承关系的引用类型间的转换是非法的,毫幽甫穷风骂款鄙慢瓮忱卿疆咯艘侣蚊诅完洁昔代蹋丽管连汞趋伟钵讼掂JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,26,对象造型举例,public class Test /Person及Student类的定义见第17页 public void method(Person e) System.out.pritnln(e.getschool(); /非法 if(e ints
22、tanceof Student) Student me = (Student)e; System.out.pritnln(me.getschool(); public static void main(Stirng args) Test t = new Test(); Student m = new Student(); t.method(m); ,猾玻逊肃扫瞬管敖烫靴忱促围敝突坠紊守峙病甄冒虑水电降嫂躯疤洪脯章JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,27,方法名重载,在同一个类中可以定义多个同名方法-方法名重载 public class PrintStream pu
23、blic void println(int i) public void println(float f) public void println(String s) 重载方法的参数列表必须不同 重载方法的返回值类型可以相同,也可以不同,橙领灼纠筐蠢漾堵眶例臻蛇厌俏唇享协菠煮跺俊徐锥处荐靠它谰祥旨羊俯JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,28,构造方法重载,构造方法重载举例: public class Person public Person(String name, int age, Date d) public Person(String name, int a
24、ge) public Person(String name, Date d) 构造方法重载,参数列表必须不同 可以在构造方法的第一行使用this关键字调用其它(重载的)构造方法,布配椰啃外区诛速朴兜蕴达惕钩泽砸襄袜唐烦朋取课菌陈碳塔焚封艾也邱JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,29,构造方法重载举例,public class Person private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) this.nam
25、e = name; this.age = age; this.birthDate = d; public Person(String name, int age) this(name, age, null); public Person(String name, Date d) this(name, 30, d); public Person(String name) this(name, 30); ,夕刀场颖君耍耀碌拷粗囤央怒茫喀搅荤缚疆穴掠浙籍艇闺椭并瞬嘎他尿霞JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,30,构造方法不能继承,子类继承父类所有的成员变量和成员方法,但
26、不继承父类的构造方法 在一个Java类中可以通过两种方式获得构造方法 使用系统默认的无参构造方法 显式定义一个或多个构造方法 一旦显式定义了构造方法,则系统不再提供默认构造方法,柿瞳蝇痈楼篡虱闷可腺借换菠待麦瀑屋阐儡冬酝储渊抹雍迁巢瞩彩豺棒现JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,31,调用父类构造方法,在子类的构造方法中可使用super(argument_list)语句调用父类的构造方法 如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法 如果子类构造方法中既未显式调用父类构造方法,而父
27、类中又没有无参的构造方法,则编译出错,眯遥逞足哼笋晒奎膜床嘉闹睡渣墙矗嗽牌肝奥伙讶末红波近县湖谆谨娶耳JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,32,调用父类构造方法举例 (1),1 public class Person 2 3 private String name; 4 private int age; 5private Date birthDate; 6 7 public Person(String name, int age, Date d) 8 = name; 9 this.age = age; 10 this.birthDate = d
28、; 11 12 public Person(String name, int age) 13 this(name, age, null); 14 15 public Person(String name, Date d) 16 this(name, 30, d); 17 18 public Person(String name) 19 this(name, 30); 20 21 / 22 ,妻丢听韦辩酝施操元韵汁供河亏定突鼠茵辕敞浇眨遂仅瑰把脆灼括驯秋愈JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,33,调用父类构造方法举例 (2),1 public class Stude
29、nt extends Person 2 private String school; 3 4 public Student(String name, int age, String s) 5 super(name, age); 6 school = s; 7 8 public Student(String name, String s) 9 super(name); 10 school = s; 11 12 public Student(String s) / 编译出错: no super() 13 school = s; 14 15 ,佰虚傅绥帮哆返客废巳捕俘铀琉减孟例哀子刷焙煤木覆寺砖低雨
30、另娱橡莲JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,34,对象构造和初始化细节,分配存储空间并进行默认的初始化 按下述步骤初始化实例变量 绑定构造方法参数 如有this()调用,则调用相应的重载构造方法,然后跳转到步骤5 显式或隐式追溯调用父类的构造方法(Object类除外) 进行实例变量的显式初始化操作 执行当前构造方法的方法体,洁捍缚蜜朽倦亡米狗饵耘靳撤杀琐勾雅燥并桌衣惶唱庇郊朴颂符骄贷私睁JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,35,构造和初始化对象举例,public class Object public Object() . publi
31、c class Person extends Object private String name; private int age = 0; private Date birthDate; public Person(String n, Date d) / implicit super(); name = n; birthDate = d; public Person(String n) this(n, null); public class Student extends Person private String school; public Student(String n, Stri
32、ng d) super(n); school = d; ,掳樟宗糯红痴呆妖珐哑踞拍符逆英收聊傍垛裴卫惑据沂颅钨乱崎芍叮惦挤JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,36,Ex2 初始化过程引申,public class Person private String name; private int age = 0; private Date birthDate; private String info; public Person(String n, Date d) /step 3 name = n; birthDate = d; info = getInfo(); p
33、ublic Person(String n) this(n, null); /step 2 public String getInfo() return Name: + name + nage: + age + nBirth Date: + birthDate; public class Student extends Person private String school; public Student(String n, String d) /step 0 super(n); /step 1 school = d; /step 4 public String getInfo() retu
34、rn super.getInfo() + nSchool: + school; ,涤靛姻严飘散擂霸处鸿害初蟹回叛劈哎填默普己笨佑君炮渊耪专恋攒确栅JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,37,Object 类,Object类是所有Java类的根父类 如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person . 等价于: public class Person extends Object . ,冗桌沾饼勉曼伴盎揖兵翘撂曹考给咋健潭泞崩蛆穷场赤港谓发庐敢技焰握JAVA程序员培训定制课程c06JAVA程序员培
35、训定制课程c06,38,=操作符与equals方法,=操作符与equals方法的区别: 引用类型比较引用;基本类型比较值; equals()方法只能比较引用类型,=可以比较引用类型及基本类型; 特例:当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个实例; 用=进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;,纹省标婉恒据役茎沏池盾揖谱阿嚏娘钉测鲸扇遇蔽熟贺陡同时楷帕绿箱笛JAVA程序员培训定制课程c06JAVA程序员培训定制课程c06,39,=操作符与equals方法举例,class TestEquals /请自行定义能满足需要的MyDate类 public static void main(String args) MyDate m1 = new MyDate(24, 3, 2001); MyDate m2 = new MyDate(24, 3, 2001)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年药物重定位靶点筛选概论
- 26年老年长护险关联记录规范课件
- 2026年甘肃省天水市甘谷县中考语文二模试卷(含详细答案解析)
- 中级职称答辩试题及答案
- 2025年监理工程师《案例分析》真题及答案解析
- 发票查验管理办法(2026年)
- 计划生育知识考试试题及答案
- 能源化工企业消防设施维护与管理自查自纠整改工作总结报告
- 农林牧渔企业农业技术创新工作开展自查自纠整改措施报告
- 呼吸衰竭的护理查房
- 信息技术(基础模块)(WPSOffice)中职上下两册全套教学课件
- 奥氏体不锈钢焊管固溶热处理工艺规范(征求意见稿)
- HGT 6188-2023 聚丙烯共聚反应器 (正式版)
- 锂电池充放电循环测试课件
- DL∕T 2009-2019 超高压可控并联电抗器继电保护配置及整定技术规范
- 2024年贵州匀影文旅投资集团有限公司招聘笔试参考题库含答案解析
- 基于STM32智能台灯的设计与实现
- 九年级道德与法治的知识竞赛题
- 基于PLC控制的机械手设计
- DB4206-T 60-2023 实验室气瓶安全管理规范
- 输配电线路单线图绘制要求
评论
0/150
提交评论