Java05继承与多态

上传人:xx****x 文档编号:243017332 上传时间:2024-09-13 格式:PPT 页数:30 大小:146.50KB
返回 下载 相关 举报
Java05继承与多态_第1页
第1页 / 共30页
Java05继承与多态_第2页
第2页 / 共30页
Java05继承与多态_第3页
第3页 / 共30页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第5章 继承与多态,主要内容,Java的继承机制,Java的多态性,抽象类和最终类,接口类型的定义和实现,9/13/2024,2,Java的继承机制,继承是现实世界中实体间的一种关系,映射到面向对象程序中就是两个类之间的一种关系。,理解继承是理解面向对象程序设计所有方面的关键所在,它允许在构成软件系统的类层次结构中重用已存在类的程序代码并扩充它们以建立一个新类来实现新的功能,从而大大提高软件的可重用性和可维护性。,9/13/2024,3,设计一个类的原则:应实现定义明确的单任务,而不是用多个任务去加重该类的负担,最好不用一个类来描述现实世界中既有共性又有差异的两类实体,而是用一个类扩展另一个类的“继承关系”来描述。,Java的继承机制,例如:,平面几何图形中的“圆”,是一种由点集合所构成的平面几何图形。该点集合以一个点(坐标)作为中心,另外点与该中心具有相等距离(半径)。对此,面向对象解析的结果应该设计两个类,即Point类和Circle类,且两个类具有继承关系,即Circle类由Point类继承而来,或者说Circle类扩展(extends)了Point类。,9/13/2024,4,子类还可以继续往下继承,即Circle类扩展为Cylinder(圆柱体)类。那么,就称Cylinder类是Circle类的直接子类,简称子类;反之,称Circle类是Cylinder类的直接超类,简称父类。,而称Point类是Cylinder类的间接超类,称Cylinder是Point类的间接子类。,Java的继承机制,9/13/2024,5,Java的继承机制由C+发展而来,与之有相似之处,但也有不同特点:,(1) Java与C+不同,只有公有继承方式而没有私有继承方式。因为访问控制修饰符可以实现继承树中的严密封装,加上Java还增加有程序包的隐藏机制,所以,它具有公有继承方式下的所有特性。,对任何已有的类,无论是Java系统提供的,还是用户自行定义的类,都可以扩展出新的子类。由于子类将继承超类的所有成员变量和方法,不管它们是什么类修饰符,超类的所有成员变量和方法都自动成为子类的变量和方法。,Java的继承机制,9/13/2024,6,不管是父类还是子类的对象都可以直接访问自身的公有变量和方法,但不能直接访问自身的私有变量和方法、保护变量和方法。那些隐藏的私有和保护变量、方法只有通过其对象调用公有方法才能访问。,不管是直接子类的对象还是间接子类的对象都可以访问公有超类或者同一个程序包内友元超类中的公有变量和方法,而不能访问它们私有的和保护的变量和方法。,在子类的任何方法体内,都可以直接地访问超类的保护变量和方法,不管是直接超类还是间接超类。但不能访问超类的私有变量和方法,它只有通过超类自身的公有方法才能访问。,Java的继承机制,9/13/2024,7,(2) Java只支持单继承,而不支持多继承。对于现实世界中大量存在的多继承关系是采用接口类型来实现的。,(3) Java除了提供一个this引用外,还提供一个super引用变量,它用来替代直接超类及父类,但不能替代间接超类。,(4) 超类的对象引用可以用来指向它的任何子类的对象,但反之子类的对象引用不能指向它的超类对象。,(5) 子类无条件地继承父类的所有方法,但不继承父类的构造方法。,Java的继承机制,9/13/2024,8,【例6-4】类之间的继承若干示例,Java的继承机制,9/13/2024,9,Java的多态性,多态(polymorphism)是面向对象的一大特征,它反映了现实世界中事物行为的动态变化。不是指整个类都具有多态性,而是指类的方法具有多态性。,使用多态与重载的优点是,便于管理名字空间,实现运行时的动态联编,提高了抽象程度,降低维护工作量,增加程序设计的灵活性。,9/13/2024,10,Java的多态性,Java语言中多态一般有四种表现形式,第一种是强制类型转换,第二种是方法重载,第三种是类或方法定义中的类型参数,第四种是继承与实现中的抽象操作,9/13/2024,11,在包含超类和子类的继承树中,有两种方式对多个方法体使用相同方法名:,使用不同参数表,其内至少有一个参数的类型不同,这称为方法重载;,子类将超类中的一个方法名重复使用并编写一个新的方法体,且采用完全相同的参数表和返回类型,这称为方法覆盖。,Java的多态性,9/13/2024,12,将一个方法或函数调用与一个方法体或函数体链接起来的操作称为“联编”。在程序运行之前编译时就执行的联编称为静态联编;在程序运行期间根据对象的类型才能决定链接哪一个方法体或函数体的联编称为动态联编。,Java全部采用动态联编技术,编程时不用考虑是否应进行动态联编。,Java的多态性,9/13/2024,13,课本P42面,Java的多态性,9/13/2024,14,抽象类,抽象类是一种特殊的类,特点:,类中的某些方法不进行实现, 而所有子类必须实现这些方法;,只要类中有一个方法是抽象的,则整个类就必须声明为抽象类;,类中至少有一个方法为抽象的,类不能进行实例化。,定义时,将关键字“,abstract,”加在类的修饰符和某些方法的修饰符中。,【例6-1】抽象类演示,9/13/2024,15,抽象方法只有方法头并在其后用一个分号来代替方法体,它不提供具体实现功能的方法体。,抽象类,9/13/2024,16,修饰符final可用于类方法和成员变量。final的本质含义就是不能改变。用final修饰的类称为最终类,用final修饰的方法称为最终方法。,最终类,9/13/2024,17,将一个类声明为最终类则它不能再有类,这可给安全方面带来极大的好处。,final,和,abstract,不能组合起来修饰同一个类。即不能声明一个类既是最终类又是抽象类。因为,抽象类自身不能有实例对象,需要派生出子类后在实例化,而最终类又不能有子类,两者相反。,最终类中的所有方法都被默认为是最终方法,因为最终类不可能有子类,就更不可能发生方法覆盖了。,最终类,9/13/2024,18,接口,接口有时也翻译成“界面”,它是抽象类概念的进一步升华,也是实现多重继承的一种结构。是另一种特殊的、比抽象类还抽象的类,在功能上像抽象类, 进行抽象方法和常量的整体声明。,常量隐含修饰符为,public,、,final,和,static,;,而方法隐含修饰符为,public,,并且均为抽象和无定义的。,9/13/2024,19,定义格式如下:,interface,接口名,extends,父接口1, 父接口2,成员常量定义部分; 成员方法声明部分;,接口之间可以通过,extends,进行多重继承;,类或抽象类可以通过,implements,实现一个或多个接口,对于类来说,实现接口时,必须实现接口提供的所有方法。,接口体内只能声明常量字段和抽象方法,并且字段被自动地指定为public型,又是static型和final型的。,【例6-2】接口演示。,接口,9/13/2024,20,子类还可以通过关键字“implements”来实现一个或多个父接口,即编写父接口中的所有方法的代码。,举例:,1 : interface MyInterface ,2 : void print();,3 : ,4 :,5 : class MyClass,6 : implements MyInterface ,7 : public void print() ,8 :,9 : public void show() ,10: ,接口,9/13/2024,21,12: class TestImplements ,13: public static void main(String args) ,14: MyClass mMyClass = new MyClass();,15: mMyClass.print();,16: mMyClass.show();,17: MyInterface myInterface = mMyClass;,18: myInterface.print();,19: myInterface.show();,20: ,21: ,接口,9/13/2024,22,接口类与抽象类的区别:,接口类的方法可以在不是继承链上的类中实现,从而为相互没有关系的类能实现相同功能的一组方法提供一种有效手段。,例如:收音机电视机和多媒体计算机都是不同种类的电子设备,但都要有“音量控制”和“音质控制”的功能。因此可以设计两个接口,只声明所要用的常量和抽象方法,再让这些不同种类的电子设备去“实现”这两个接口。,接口,9/13/2024,23,1: interface VolumeControl,2: String volume();,3: ,4: interface ToneControl,5: String timbre();,6:,7: abstract class Appliance,8: static final String MAKER = “Make in China”;,9: abstract int getPrice();,10: ,11: class PComputer extends Appliance,12: implements VolumeControl, ToneControl,13: int price;,接口,9/13/2024,24,14: public void setPrice(int p) price = p;,15: public int getPrice() return price;,16: public String volume(),17: return “Volume Controllable”;,18: public String timbre(),19: return “Tone Controllable”;,20: ,21: public class MultimediaPC,22: static String priceStr(Appliance x),23: ,24: Integer i = new Integer(x.getPrice();,25: return i.toString();,26: ,接口,9/13/2024,25,27: static String vc(VolumeControl x),28: return “has” + x.volume() + “and”;,29: static String tc(ToneControl x),30: return x.timbre() + “Function”;,31: public static void main(String args),32: ,33: PComputer pc = new PComputer();,34: pc.setPrice(12480);,35: System.out.println(Appliance.MAKER + “MultimediaPC:”);,36: System.out.println(vc(pc)+tc(pc)+”n Price:”+priceStr(pc);,37: ,38: ,接口,Make in China MultimediaPC:,has Volume Controllable and Tone Controllable Function,Price: 12480,9/13/2024,26,接口与接口之间可以完成继承,接口继承举例1:,interface BaseColors ,int RED = 1, GREEN = 2, BLUE = 4;,interface RainbowColors,extends BaseColors ,int YELLOW = 3, ORANGE = 5, INDIGO = 6, VIOLET = 7;,接口,9/13/2024,27,接口与接口之间还可以完成多重继承。,接口继承举例2:,interface PrintColors,extends BaseColors ,int YELLOW = 8, CYAN = 16, MAGENTA = 32;,interface LotsOfColors,extends RainbowColors, PrintColors ,int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = RED + 90;,接口,9/13/2024,28,综合例子,【例,6-7】哺乳动物类及其相关接口和子类,声音接口SoundInterface,抽象哺乳动物类MammalClass,人类ManClass,猫类CatClass,信息类Message,测试主类MainClass,9/13/2024,29,END,第5章 继承与多态,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!