欢迎来到天天文库
浏览记录
ID:55596794
大小:381.00 KB
页数:42页
时间:2020-05-20
《Java_语言与面向对象程序设计(第二版)课件第五章.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、第5章继承与多态主要内容:继承多态接口和包继承继承:子类利用父类中定义的方法和变量就像它们属于子类本身一样;(包括父类的私有属性、私有方法,但不可见);单重继承:一个类只能有一个父类(Java、C#、VC++);多重继承:一个类可以有多个父类(标准C++);电话卡域:剩余金额方法:拨打电话查询金额无卡号电话卡域:电话机型号方法:获得电话机型号有卡号电话卡域:卡号,密码,接入号码,接通方法:登录交换机IP卡域:有效时间方法:拨打电话200卡域:附加费用方法:拨打电话修改密码电话IC卡方法:拨打电话电话磁卡域:使用地
2、域方法:拨打电话继承继承继承继承继承继承图5-1各种电话卡类及其间继承关系继承的优点、目的优点:更有效地组织程序结构,明确类间关系;目的:使程序结构清晰,提高开发效率,降低编码和维护工作量。派生子类《例5-1》PhoneCard类及其派生子类abstractclassPhoneCardabstractclassNone_Number_PhoneCardextendsPnoneCardabstractclassNumber_PhoneCardextendsPnoneCard问题:第二行、第三行的类为什么是抽象类,能
3、否去掉abstract关键字?域的继承子类继承(拥用)父类的所有非私有(P91~92页各类拥有的域);电话卡域:剩余金额方法:拨打电话查询金额无卡号电话卡域:电话机型号方法:获得电话机型号有卡号电话卡域:卡号,密码,接入号码,接通方法:登录交换机IP卡域:有效时间方法:拨打电话200卡域:附加费用方法:拨打电话修改密码电话IC卡方法:拨打电话电话磁卡域:使用地域方法:拨打电话继承继承继承继承继承继承域的隐藏子类重新定义一个从父类继承来的域变量(可以具有不同类型),称为域的隐藏(指新定义的域变量隐藏了父类的同名变量
4、)。举例:《例5-2》的简化版;abstractclassA{doublem_a;abstractdoublesub();doubleget(){returnm_a;}}classBextendsA{doublem_a;doublesub(){m_a-=1;returnm_a;}doublesuper_sub(){super.m_a-=1;returnsuper.m_a;}}publicclassApplication1{publicstaticvoidmain(String[]args){Bb=newB();b
5、.m_a=100;System.out.println(b.get());System.out.println(b.sub());System.out.println(b.super_sub());}}输出为:099-1;b.m_a=100;b.get()b.sub()b.super_sub()问题:以下程序访问的是父类还是子类?《要点》:1)被隐藏的父类域在子类对象中仍占有独立的内存空间;2)子类可通过super关键字或继承自父类的方法访问或处理继承自父类的域。方法的继承与覆盖继承:子类可继承父类的所有非私有方
6、法;覆盖(Override):子类重新定义与父类同名的方法(指非静态方法,要求方法名、返回值和参数列表完全相同);如果子类的非抽象方法覆盖了父类的抽象方法,称子类“实现”了父类的抽象方法。abstractclassA{doublem_a;abstractdoublesub();doubleget(){returnm_a;}}classBextendsA{doublem_a;doublesub(){m_a-=1;returnm_a;}doublesuper_sub(){super.m_a-=1;returnsupe
7、r.m_a;}doubleget(){returnm_a;}}//测试publicclassApplication1{publicstaticvoidmain(String[]args){Bb=newB();b.m_a=100;System.out.println(b.get());}输出为:100《例》域的隐藏、方法覆盖、方法重载classPoint{//父类intx=0,y=0;voidmove(intdx,intdy){x+=dx;y+=dy;}}classRealPointextendsPoint{/
8、/子类floatx=0.0f,y=0.0f;//域的隐藏voidmove(intdx,intdy)//方法的覆盖{System.out.println("subclass'smove");move((float)dx,(float)dy);}voidmove(floatdx,floatdy)//方法的重载{x+=dx;y+=dy;}}publicclassApplica
此文档下载收益归作者所有