




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
继承多态和动态绑定抽象类接口内部类,第四章继承、接口和内部类,继承,classEmployeeprivateStringname;privatedoublesalary;privateDatehireDay;publicEmployee(Stringn,doubles,intyear,intmonth,intday)name=n;salary=s;GregorianCalendarcalendar=newGregorianCalendar(year,month-1,day);hireDay=calendar.getTime();publicStringgetName()returnname;publicdoublegetSalary()returnsalary;publicDategetHireDay()returnhireDay;publicvoidraiseSalary(doublebyPercent)doubleraise=salary*byPercent/100;salary+=raise;,Manager:相同之处:姓名,薪水,雇用日期不同之处:薪水还包括奖金Amanagerisaemployee。,继承,继承的特点格式:extends父类名;若无extends,则默认父类Object,classManagerextendsEmployee,Employee:超类(superclass),基类(baseclass),父类(parentclass)Manager:子类(subclass),派生类(derivedclass),孩子类(childclass),子类将继承父类成员,但不能直接访问父类private成员Manager继承了成员变量:name,salary,hireDay方法:getName,getSalary,getHireDay,raiseSalary,Managerm=newManager();m.getName();,继承,继承的特点子类可对父类可做扩展和特殊化(1)添加新的成员:成员变量和方法,classManagerextendsEmployeeprivatedoublebonus;/添加新的成员变量publicvoidsetBonus(doubleb)/添加新的方法bonus=b;,publicdoublegetSalary()/覆盖父类中的方法doublebaseSalary=super.getSalary();returnbaseSalary+bonus;,(2)重新定义父类中已有的方法:覆盖(override)子类中的方法应与父类中的被覆盖的方法有完全相同的:参数列表、返回值;而且访问权限不能更严格;super调用父类被覆盖的方法,继承,继承的特点子类的构造方法,publicManager(Stringn,doubles,intyear,intmonth,intday)/构造方法,super(n,s,year,month,day);bonus=0;,(1)在子类的构造方法中使用super(参数)调用父类的含参构造方法,super必须是第一句,继承,继承的特点子类的构造方法(2)若子类的构造方法中,没有使用super调用父类的构造方法和this调用重载的其他构造方法,则在创建子类对象时,系统默认先调用父类的无参构造方法,然后执行子类的构造方法;(3)this()和super()不能同时出现例:Sandwich.java(构造方法调用次序)ManagerTest.javaMealLunchPortableLunchSandwich:Bread,Cheese,Lettuce,继承,继承的特点单继承、多层继承,Employee,Manager,Secretary,Programmer,Executive,继承,finalfinal标记的类不能被继承final标记的变量是常量,只能赋值一次(final成员变量必须在定义的时候赋值或在构造方法中赋值,才能使用)final标记的方法不能被覆盖,finalclassExecutiveextendsManagerclassEmployeepublicfinalStringgetName()returnname;,例:FinalTest.java,多态和动态绑定,多态一个引用变量可以引用多种实际类型对象的现象称为多态。一个引用变量可以引用这个类和该类的所有子类对象。父类引用变量引用子类对象(1)规则:沿着继承层次,从下往上,子类对象可以当做父类对象使用(2)转换时机:赋值,方法调用(参数传递),Employeee;e=newEmployee();e=newManager();Employeestaff=newEmployee3;Managerboss=newManager();staff0=boss;/赋值时发生自动转换staff0.raiseSalary();/正确staff0.setBonus();/错误,setBonus(),多态和动态绑定,多态父类引用变量赋值给子类引用变量(强制转换),Employeee=newEmployee();Managerm=e;/错误Employeeboss=newManager();Managerm=(Manager)boss;/强制转换m.setBonus();/需要使用子类中的方法,编译:其中一类是另一类的子类运行:oldetype指示的对象所属的类是newtype类或者子类,setBonus(),多态和动态绑定,多态instanceof:引用变量instanceof类名判断对象是否是某一类或该类的子类,在强制转换之前一般使用instanceof检查转换是否正确,Employee,Manager,Secretary,Programmer,Executive,Employeem=newManager();Managern;if(minstanceofManager)n=(Manager)e;,多态和动态绑定,动态绑定执行过程中根据引用变量实际引用的对象类型调用相应的方法。优点:无需对现存代码进行修改就可对程序进行扩展,Managerboss=newManager(CarlCracker,80000,1987,12,15);boss.setBonus(5000);Employeestaff=newEmployee2;staff0=boss;staff1=newEmployee(HarryHacker,50000,1989,10,1);for(Employeee:staff)System.out.println(name=+e.getName()+,salary=+e.getSalary();,publicvoidmethod(Employeee)e.getSalary();,抽象类,抽象类(abstractclass)不包含方法定义的方法称为抽象方法任何包含抽象方法的类必须声明为抽象类不能生成抽象类的对象;可以定义抽象类的引用变量,用来引用非抽象子类对象抽象类的子类必须覆盖所有的抽象方法,才能生成对象,否则仍然是抽象类例:AbstractClassTest.java,area(),Circle,Square,Shape,area(),area(),area(),Triangle,方法体交给子类根据自己的情况实现,abstractclassShapepublicabstractdoublearea();,Shapeshape=newShape();/errorShapeshape=newCircle();/ok,包(防止命名冲突,import,package)使用Jar文件文档注释(javadoc)继承(特点,构造方法)多态抽象类(abstract),回顾,访问控制,访问控制修饰符用来控制类、成员变量、方法和构造方法的访问权public:所有类可见protected:对子类和本包可见(继承访问权限)缺省:对本包可见private:本类可见(你无法访问)其中成员变量、方法和构造方法可以使用这4种修饰符;一般类使用public和缺省修饰符,classParserpublicclassComplexpublicinti;protectedintj;intk;privateintl;,publicprotectedintx;/errordefaultclassComplex/error,Object类,所有类的根可以使用Object引用变量引用任何类型的对象,classEmployee与下面相同classEmployeeextendsObject,Objectobject=newEmployee(“Jack”,35000);Employeee=(Employee)object;,Object类,/Employee类:假定姓名、薪水、雇佣日期相同则认为它们相等publicbooleanequals(ObjectotherObject)/注意类型if(this=otherObject)returntrue;/是否引用同一个对象if(otherObject=null)returnfalse;/是否为空if(getClass()!=otherObject.getClass()returnfalse;/是否属于同一类Employeeother=(Employee)otherObject;returnname.equals(),equals方法检测一个对象是否等于另一个对象Object类中提供的实现为比较是否具有相同的引用可在类中重新定义该方法,以实现预期的操作,Object类,/Employee类:假定姓名、薪水、雇佣日期相同则认为它们相等publicStringtoString()return“Employeename=”+name+“,salary=”+salary+“,hireDay=”+hireDay+”;类名也可用getClass().getName()获取,toString方法返回表示对象值的字符串一般的类的实现为:类名成员变量值当出现字符串+对象时,将自动调用toString方法,/Manger类:可以调用父类的toString方法publicStringtoString()returnsuper.toString()+“bonus=”+bonus+”;,Employeeemployee=newEmployee();Strings=“”+employee;System.out.println(employee);,接口,描述类具有什么功能,而不给出每个功能的具体实现接口的中的方法和成员变量定义接口,接口,描述类具有什么功能,而不给出每个功能的具体实现接口的中的方法和成员变量定义接口,接口,接口,一个类可以实现一个或多个接口可以定义接口引用变量,引用实现了接口的类的对象instanceof可以检查一个对象是否实现了某个特定的接口利用接口可实现多重继承的大部分功能,同时避免其复杂性例:InterfaceTest.java,内部类,在一个类的内部嵌套定义的类成员内部类与方法和成员变量并列定义的类,与它们地位相同可以访问外部类成员变量和方法;外部类不能访问它的成员变量和方法,但外部类可以创建它的对象可以声明为private,protected,public或缺省,例:InnerClassTest.java,classOuterOneprivateintx;publicclassInnerOne/成员内部类publicvoidouterMethod(),内部类,方法中的内部类在方法内部定义可访问外部类的成员变量和方法,还可访问方法中final局部变量外部方法不能访问它的成员变量和方法,但外部方法可以创建它的对象不能使用访问修饰符,不能使用static,例:MOuter.java,classMOuterpublicvoidgo()inta;.classMInner/go方法内的内部类,内部类,匿名内部类方法中定义的内部类,没有类名可以extends其他类,或implements一个接口(不可同时)在同一位置定义、创建和使用内部类,publicvoidaMethod()theButton.addActionListener(newActionListener()/匿名类,implements接口ActionListenerpublicvoidactionPerformed(ActionEvente)System.out.println(“theactionhasoccurred”);/匿名类结束);,内部类,匿名内部类定义:newXxxx()/*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【语文】小学一年级上学期期末试题测试题
- 2025年新安全员证c类考试题及答案
- 2025年监理工程师案例分析交通考试真题及答案解析
- 演练脚本隧道坍塌事故应急演练方案
- 2025年国际中文教师证书考试预测试卷含答案
- 传统家居设计咨询方案
- 感情咨询方案费用高吗
- 物理试题卷(考试版)【湖北卷】【高二下期末考】湖北省孝感市部分高中2024-2025学年下学期高二年级7月期末联考(7.1-7.2)
- 团体咨询方案设计案例
- 咨询方案套路怎么写范文
- 葫芦种植技术
- 热敏电阻器配方设计与制备工艺详解
- 监理工程师题库检测试题打印含答案详解【完整版】
- 《英语(第三版)》课件-Unit 3
- 2025-2026学年九年级英语上学期第一次月考 (江苏省连云港专用)原卷
- 2《归园田居》任务式公开课一等奖创新教案(表格式)统编版高中语文必修上册
- GB/T 18380.12-2022电缆和光缆在火焰条件下的燃烧试验第12部分:单根绝缘电线电缆火焰垂直蔓延试验1 kW预混合型火焰试验方法
- GB/T 13912-2020金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- GB 12326-2000电能质量电压波动和闪变
- 《空气动力学》配套教学课件
- 安全经验分享食物中毒
评论
0/150
提交评论