多重继承-课件

上传人:仙*** 文档编号:244516737 上传时间:2024-10-04 格式:PPT 页数:39 大小:381.15KB
返回 下载 相关 举报
多重继承-课件_第1页
第1页 / 共39页
多重继承-课件_第2页
第2页 / 共39页
多重继承-课件_第3页
第3页 / 共39页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,1-,*,第八章,继承,张坤龙,天津大学计算机学院,第八章继承,概要,创建子类,方法覆盖,类的层次结构,继承与可见性,继承的设计,继承与,GUI,Timer,类,2,概要创建子类2,类,A,类,B,类,C,类,D,类,F,类,G,Java,中仅仅支持单一继承,同时,Java,采用,Interface(,接口,),实现多重继承,多重继承,3,类A类B类C类D类F类GJava中仅仅支持单一继承,同时Ja,继承,UML,类图中,继承关系如下表示:一条带,空心三角,的实心箭头线表示,三角指向父类,Vehicle,Car,继承:是一个的关系,(,is-a,),即子类是父类的一个特殊版本,Java,中,使用,保留字,extends,来创建,继承关系,class Car extends Vehicle,/class contents,4,继承UML 类图中,继承关系如下表示:一条带空心三角的实心箭,派生子类,Java,中,使用保留字,extends,来创建继承关系,参考,Words.java,(,第,298,页,),参考,Book.java,(,第,299,页,),参考,Dictionary.java,(,第,299,页,),class Car extends Vehicle,/class body,5,派生子类Java中,使用保留字extends来创建继承关系,类图,Book,#pages:int,+pageMessage():void,Dictionary,-definitions:int,+definitionMessage():void,Words,+main(args:String):void,表示,protected,修饰符,6,类图Book#pages:int+pageMessa,protected 修饰符,可见性修饰符影响父类的成员在子类中使用的方式,private,修饰的变量和方法不能在子类中直接引用,但是它们被声明为,public,可见性,那么他们可以在子类中引用,但是,public,违背的封装的原则,那么还有一种可见性修饰符,:protected,,它比,public,可见性提供了更多的封装,但是又没有,private,封装的那么严实。,7,protected 修饰符可见性修饰符影响父类的成员在子类中,super 引用,由于构造函数,不被继承,,所以,子类构造函数,通过,调用,父类的构造函数,建立,子类,中,父类的部分,参考,Words2.java,(,第,301,页,),参考,Book2.java,(,第,302,页,),参考,Dictionary2.java,(,第,303,页,),8,super 引用由于构造函数不被继承,所以子类构造函数通过调,super引用,应由子类的构造函数负责调用父类的构造函数,子类构造函数,中,:,第一行,应该使用,super,引用,调用,父类的构造函数,,否则,Java,将自动在构造方法开始处产生一行,super(),调用。,Super,的第二种形式,这种用法有下面的通用形式,super.member,9,super引用应由子类的构造函数负责调用父类的构造函数9,多重继承,Java,支持单继承,也就是说派生的子类只能由唯一的父类,多重继承 允许子类派生自两个或者两个以上的父类,子类继承所有父类的成员,多重继承有时会引发一些问题,例如两个父类具有同名变量。,Java,并不支持多重继承,多数情况下,使用接口在某些方面来替代多重继承,10,多重继承Java支持单继承,也就是说派生的子类只能由唯一的父,概要,创建子类,方法覆盖,类的层次结构,继承与可见性,继承的设计,继承与,GUI,Timer,类,11,概要创建子类11,覆盖、重载的比较,重载,处理,一个类,中的多个,具有相同名称,但是,签名不同,的方法,覆盖,处理的方法,一个在,父类中,,一个在,子类中,两个方法具有,相同的签名,参考,Messages.java,(,第,305,页,),参考,Thought.java,(,第,306,页,),参考,Advice.java,(,第,306,页,),可以用,final,修饰符,定义一个方法,子类,不能覆盖,父类的,final,方法,12,覆盖、重载的比较重载处理一个类中的多个具有相同名称但是签名,概要,创建子类,方法覆盖,类的层次结构,继承与可见性,继承的设计,继承与,GUI,Timer,类,13,概要创建子类13,类的层次结构,某个类的,子类,可以是,另外一个类,的,父类,形成类的层次结构:,动物,马,蝙蝠,鸟类,燕子,哺乳动物,具有,相同父类,的两个子类称作,兄弟,公共属性应该尽可能放在类层次中较高层,继承关系具有传递性,因此,子类可以从继承,所有父类,的成员,14,类的层次结构某个类的子类可以是另外一个类的父类,形成类的层,Object 类,Object,类,在,java,标准类库的,java.lang,包,中定义,Java,中,所有的类,都派生自,Object,类,如果一个类定义时,没有显式,地,指明其父类,那么此类继承自,Object,类,因此,Object,类,是,类层次结构,中的,根类,15,Object 类Object类在 java标准类库的java,Object类,Object,类包含包含一些被所有类继承的有用方法,例如,,Object,类中定义的,toString,方法,每次我们定义,toString,方法,实际上是覆盖了此方法从,Object,类继承的定义,Object,类中的,toString,方法返回一个字符串,这个字符串包含对象类的名称以及其它一些信息,16,Object类Object类包含包含一些被所有类继承的有用方,Object 类,如果两个引用,互为别名,,,Object,类中的,equals,方法返回,true,我们在定义类时,可以覆盖,equals,方法来根据实际情况确定两个对象是否相等,例如,如果两个字符串对象包含相同的字符,那么,String,类定义的,equals,方法来返回,true,设计,String,类时,覆盖了继承自,Object,类的,equals,方法,17,Object 类如果两个引用互为别名,Object 类中的e,抽象类,抽象类在类的层次结构中起到,占位符的作用,,通常用于表示一种通用概念。,抽象类不能被实例化,在,类的头部,使用,abstract,修饰符来申明一个,抽象类,:,public,abstract,class Product,/contents,18,抽象类抽象类在类的层次结构中起到占位符的作用,通常用于表示一,抽象类,抽象类中通常包含没有实现的抽象方法,在抽象类中,abstract,修饰符,必须,应用于,每个抽象方法,而在接口中可以省略抽象方法的,abstract,修饰符,一个抽象类也可以包含,非抽象的方法,抽象类,没有必要,必须包含,抽象方法,即抽象类也可以没有抽象方法。与接口不同的是,abstract,修饰符,必须,应用于,每个抽象方法,19,抽象类抽象类中通常包含没有实现的抽象方法19,抽象类,抽象类的子类必须覆盖其父类的抽象方法,否则此子类依然被认为是抽象类,抽象方法,不能,使用,final,或,static,定义,在软件设计中,抽象类是一个重要元素:它允许我们在层次结构中建立通用元素,20,抽象类抽象类的子类必须覆盖其父类的抽象方法,否则此子类依然被,接口层次,与类一样,继承也可以被应用于接口,即接口可以派生出另外一个接口,子接口继承了父接口中所有的抽象方法,实现子接口的类必须定义所有父类与子接口中的所有方法,注意,类的层次结构与接口层次结构是不同的,21,接口层次与类一样,继承也可以被应用于接口,即接口可以派生出另,概要,创建子类,方法覆盖,类的层次结构,继承与可见性,继承的设计,继承与,GUI,Timer,类,22,概要创建子类22,重温可见性,理解继承与可见性的细微差别是非常重要的,父类所有的变量和方法,甚至是私有成员都会被子类所继承,我们以前提到过,子类中不能通过名字引用私有成员,但是,被子类继承的私有成员总是存在并且能被间接引用,23,重温可见性理解继承与可见性的细微差别是非常重要的23,可见性,父类可以引用自己的私有成员,因此子类可以用过调用父类的方法间接引用父类私有成员,即使没有父类对象存在,也可以通过,Super,引用指向父类,参考,FoodAnalyzer.java,(,第,311,页,),参考,FoodItem.java,(,第,312,页,),参考,Pizza.java,(,第,312,页,),24,可见性父类可以引用自己的私有成员,因此子类可以用过调用父类的,概要,创建子类,方法覆盖,类的层次结构,继承与可见性,继承的设计,继承与,GUI,Timer,类,25,概要创建子类25,继承关系的设计,正如我们前面讨论的,花费时间建立好的软件设计将获得长期的效益,继承的设计是面向对象设计中非常重要的一部分,恰当的设计继承关系对于软件的可维护性以及重用非常有用,我们来总结一些好的软件设计在继承方面应该注意的问题,26,继承关系的设计正如我们前面讨论的,花费时间建立好的软件设计,继承设计观点,每一次的派生都应该具有“,is-a”,的关系,设计类层次结构有利于现有类的重用和将来潜在的软件重用,在问题领域识别类和对象,找出它们的公共属性,并合理地将公共属性设置在尽可能高的类层次上,通过方法的覆盖和增加修改子类的功能,给子类增加新的变量时,注意避免重新定义任何继承来的变量(避免影子变量),27,继承设计观点每一次的派生都应该具有“is-a”的关系 27,继承设计观点,让每个类管理自己的数据;使用,super,引用调用父类构造方法建立自己的数据,即使当前还不使用,也应该重新定义常用的方法,例如,toString,和,equals,方法,使用抽象类代表低层类都有的通用概念,慎重地使用可见性修饰符,在提供子类所需的访问控制的同时,不要破坏封装,28,继承设计观点让每个类管理自己的数据;使用super引用调用父,限制继承,Final,修饰符可以用于限制继承,如果,final,修饰符应用于一个方法,那么任何子类都不能覆盖这个方法,如果,final,修饰符用于整个类,那么这个类,不能派生任何子类,因此抽象类不能被声明为,final,恰当地利用,final,修饰符限制继承是软件设计方案中的关键,29,限制继承Final修饰符可以用于限制继承 29,概要,创建子类,方法覆盖,类的层次结构,继承与可见性,继承的设计,继承与,GUI,Timer,类,30,概要创建子类30,组件类的层次结构,定义,GUI,组件的所有,Java,类都是类层次结构中的一部分,Swing GUI,组件由,Jcomponent,类派生,,Jcomponent,类由,Container,派生,,Container,类由,Component,类派生,许多,Swing,组件由于派生自,Container,类,因此,能作为容器,例如,,JLabel,对象可以包含一个,ImageIcon,对象,31,组件类的层次结构定义GUI 组件的所有Java类都是类层次结,组件类的层次结构,Applet,是体现继承的一个比较好的例子,回顾一下,当我们定义一个,applet,时,我们要扩展,Applet,类或者,JApplet,类,Applet,类和,Japplet,类已经处理了所有关于,applet,创建、执行的所有细节,包括:,与浏览器的交互,通过,HTML,接收,applet,参数,增强安全限制,32,组件类的层次结构Applet是体现继承的一个比较好的例子 3,组件类的层次结构,我们的,applet,类只需要关注特定的
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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