




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成都传智播客教育 讲师:任小龙,Java 面向对象2,讲师:任小龙(Will) Email:,成都传智播客教育 讲师:任小龙,今日任务,继承 隐藏和覆写 super 多态 引用类型转换 多态方法调用 组合关系,成都传智播客教育 讲师:任小龙,泛化和特化,泛化:将不同子类中的共性抽象成父类的过程; 特化:在原有父类的基础上加入一些个性的过程; 原则:父类放共性,子类放个性;,成都传智播客教育 讲师:任小龙,面向对象 之 继承,继承的引入; 继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。 格式: 修饰符 class SubClass extends SuperClass 按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类;,java.lang.Object是所有类的父类, Object要么是直接父类要么是间接父类。,成都传智播客教育 讲师:任小龙,继承,定义:可以基于已存在类的定义上加以拓展,而产生新的子类定义,子类类可以继承父类原来的某些定义,也可以增加原来父类所没有的定义,或者覆写父类中的某些特性。从面向对象的角度上看,继承是一种从一般到特殊的关系。 提高了代码的复用性,提高软件开发效率; 让类与类之间产生关系,多态的前提; 每一个Java类(除了Object外)都有且只有一个直接的父类,即使一个类没有显示的继承另外一个类,那该类的直接父类默认是Object。即class Demo 等价于 class Demo extends Object。 Java只支持单继承,不支持多继承,但是可以多重继承,java.lang.Object是所有类(除了Object)的根类,Object要么是直接父类要么是间接父类。 子类绝对不能获得父类里的private成员和构造方法。,继承关系,子类继承了父类的哪些东西? SubClass类继承SuperClass类中的public和protected成员(字段、方法、内部类)。 当SubClass和SuperClass类是位于同一包中,SubClass类还会继承SuperClass类中的默认访问权限成员。 私有成员和构造器,绝对继承不到。,成都传智播客教育 讲师:任小龙,成都传智播客教育 讲师:任小龙,子类访问父类,子类不能直接访问父类的私有成员; 但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。 Person类中有私有字段name,Student继承Person new Sudent().name; new Student().getName(); ,若一个类的所有的构造方法使用private修饰,该类能不能有子类? 若一个类的所有的构造方法使用protected修饰,该类能不能有子类?,隐藏,满足继承的访问权限下: 隐藏父类静态方法:若子类定义的静态方法的签名和超类中的静态方法签名相同,那么此时就是隐藏父类方法。注意:仅仅是静态方法 隐藏父类字段:若子类中定义的字段和超类中的字段名相同(不管类型),此时就是隐藏父类字段,此时只能通过super访问被隐藏的字段。 隐藏本类字段:若同类中某局部变量名和字段名相同,此时就是隐藏本类字段,此时只能通过this访问被隐藏的字段。 注:不建议隐藏字段,这样的代码阅读性不高,也很累赘。,成都传智播客教育 讲师:任小龙,成都传智播客教育 讲师:任小龙,覆写父类方法,鸟(Bird)和鸵鸟(Ostrich)的例子 鸵鸟是鸟类中的一个特殊品种,所以鸵鸟类是鸟类的一个子类; 但是鸟类有飞翔的功能,但是鸵鸟呢? 飞翔的行为显然不适合于鸵鸟,此时肿么办?,子类拓展父类(子类是父类的一种特殊情况) 主要是以父类为基础,然后添加属于自己的字段和方法。 子类需要覆写父类方法。 当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。,方法覆写原则,方法覆写的原则(一同两小一大): 一同: 实例方法签名必须相同。 (方法签名= 方法名 + 方法的参数列表) 两小: 子类方法的返回值类型是父类方法的返回值类型的子类或相同类。 子类方法声明抛出的异常应比父类方法声明抛出的异常更小或相等。 子类方法中声明抛出的异常小于或等于父类方法声明抛出异常类型; 子类方法可以同时声明抛出多个属于父类方法声明抛出异常类的子类(RuntimeException类型除外); 一大: 子类方法的访问权限比父类方法访问权限更大或相等。,成都传智播客教育 讲师:任小龙,方法覆写注意,方法覆写是建立可被继承的方法基础上而言的。父类构造方法、父类私有方法不能被继承,也就不能被覆写。 覆写方法和被覆写方法,必须都是实例方法。字段没有覆写概念,子类存在和父类方法签名相同的静态方法,不能叫覆写,只能称为隐藏。 判断是否是覆写方法的必杀技:Override标签:若方法是覆写方法,在方法前或上贴上该标签, 编译通过,否则,编译出错。,成都传智播客教育 讲师:任小龙,成都传智播客教育 讲师:任小龙,Overload & Override,成都传智播客教育 讲师:任小龙,super关键字,若要在子类中调用父类被隐藏的字段或被覆写的方法,此时怎么办? 表示调用该方法的对象的父类对象 如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法。 使用super调用父类方法 使用super调用父类的构造方法 使用super的情况: 在子类中访问父类的被隐藏的字段和被覆写的方法。 在子类的构造方法中,可使用super语句调用该类的父类的指定构造器。,成都传智播客教育 讲师:任小龙,子类对象实例化过程,在继承操作中,对于子类对象的实例化: 子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法。,实例化子类对象,父类构造方法,自身构造方法,1.先调用,2.再调用,成都传智播客教育 讲师:任小龙,调用父类构造方法,调用构造方法 本类中调用另一个重载构造方法用this(参数列表) 子类构造方法调用父类构造方法用super(参数列表) 子类调用父类的构造方法时: super必须放在第一句 Java在执行子类的构造方法前会先调用父类无参的构造方法,其目的是为了对继承自父类的成员做初始化操作。 子类在创建对象的时候,默认调用父类的无参构造方法,要是子类构造方法中显示指定调用父类其他构造方法,就调用指定的父类构造方法,取消调用父类无参构造方法。,成都传智播客教育 讲师:任小龙,this & super,注意:使用super()和this()在同一个构造方法中是不可能同时显示出现的,编译类型和运行类型,前面说拓展关系是一种“is a”的关系,也就是说子类是父类的一种特殊情况,那么创建的子类对象是不是父类类型呢?一只猫是不是动物呢?若是,在代码上怎么体现 编译时类型:声明该变量时使用的类型,表示把对象看做是什么类型。 运行时类型:创建对象的类型是对象的真正类型,表示对象实际上是什么类型。 当对象的编译时类型和运行时类型不同时,就产出了现多态。 注意:编译类型和运行类型必须有继承关系,继承是多态产生的前提。,成都传智播客教育 讲师:任小龙,成都传智播客教育 讲师:任小龙,面向对象 之 多态,“多态”:指同一个实体同时具有多种形态 我家里养了一只宠物,你知道到底是啥宠物吗?你能猜到宠物的叫声是怎样的吗?“宠物”这个实体,可能有狗、猫、鸟等这样的多种具体形态,那么不同形态的叫声是不一样的。 在程序中,多态是可以直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。 多态的实现机制:父类的引用变量指向子类的实例对象,程序调用的实例方法在运行期才动态绑定。,前提:Cat extends Animal: Animal a = new Animal(); Cat c = new Cat(); Animalp = new Cat(); 引用关系:父类变量指向子类实例对象,成都传智播客教育 讲师:任小龙,关于多态,实现多态的机制: 父类的引用变量指向子类的实例对象,程序调用的实例方法在运行期才动态绑定。 多态的作用: 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 只修改方法的实现,不必修改方法的声明 继承是多态产生的前提条件; 分类: 编译时多态:方法重载: 在编译阶段就能确定到底调用的是哪个方法 运行时多态:方法覆写 在运行阶段才能确定到底调用的是哪个对象的方法 一般情况下,说道的“多态”就是指运行多态。 一起完成喂养动物的例子。,成都传智播客教育 讲师:任小龙,引用变量类型转换,向上转型(子类父类):(自动完成) 父类名称 父类对象 = 子类实例 ; 向下转型(父类子类):(强制完成) 子类名称 子类对象 = (子类名称)父类实例 ;,对象名 instanceof 类 判断指定的变量名此时引用的真正类型是不是当前给出的类或子类; 注意: 对象的类型和 类必须有继承关系,成都传智播客教育 讲师:任小龙,多态时方法的调用,引用变量在编译时只能调用其编译类型所具有的方法 若show方法是Animal和Dog类中的静态方法,此时父类show方法被隐藏,不能被覆写,此时变量a调用show方法时不具备多态特征,也就不存在多态。 若show方法是子类覆写父类的方法,此时变量a调用的show()方法实际上是子类里的show方法。(运行多态),实例方法覆写和静态方法隐藏区别,多态时,Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。 即:被调用的覆写方法是子类的方法,被调用的隐藏方法是父类的方法。 区别覆写和隐藏经典例子:,成都传智播客教育 讲师:任小龙,继承 & 组合(类与类之间的结构),继承是实现类重用的重要手段,但是继承有一个最大的弱点:破坏封装。 继承关系中,子类能访问父类的字段和方法,也就是说子类能访问到父类的实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技师考试题库及答案详解
- 森林防灭火知识培训简报课件
- 森林防火知识培训课件
- 梭菌基础知识培训课件
- 2025年软件架构师面试攻略与热点预测题解析
- 《招标采购专业实务》模拟试题及答案
- 2025年药品安全操作规程题解
- 2025驾照检验考试试题及答案
- 2025年医生招聘考试题库及答案解析
- 2025年政府公务员考试模拟试题及标准答案详解
- 医院节能培训课件模板
- 医学检验技术职业道德
- 2025年全国“质量月”企业员工全面质量管理知识答题(含答案)
- 2025年初级工程测量员考试试题(附答案)
- 2025低空经济发展及关键技术概况报告
- 学堂在线 经济学原理 章节测试答案
- 2025年湖北省宜昌市【辅警协警】笔试模拟考试(含答案)
- 皮肤 T 细胞淋巴瘤诊疗指南(2025年版)
- 2025学校“三重一大”事项集体决策制度及会议记录
- 动脉采血常见并发症及处理护理
- 2025年高压电工作业操作证考试题库及答案含答案
评论
0/150
提交评论