ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Head First Java学习:第七章-继承和多态

2022-05-01 22:00:55  阅读:135  来源: 互联网

标签:Head Java 继承 子类 多态 类型 父类 方法


第七章:继承和多态 1、 覆盖(override) 覆盖的意思是由子类重新定义继承下来的方法,以改变或延伸此方法的行为。 2、 继承(extends) 类的成员:实例变量+方法 实例变量无法覆盖是因为不需要,它们没有定义特殊的行为。 继承的关系意味着子类可以继承了父类的成员,包含实例变量和方法。 用继承可以防止子类中出现重复的程序代码。 继承调用哪个方法: 对于继承的“层次树”,java虚拟机从层次树的最下方开始找,找不到就会往上寻找直到找到为止。 IS-A:测试继承 如果类Y是继承类X,且类Y是类Z的父类,那么: Y IS-A X Z IS-A Y Z IS-A X 3、 super:在子类中还打算引用父类的方法然后加上额外行为。 可以做在父类中设计出所有子类都使用的功能实现,让子类可以不用完全覆盖掉父类的功能,只是再加上额外的行为,可以通过 super这个关键字取用父类。 举例: public void roma(){ super.roma(); // 会先执行super版的roma(),然后再回来执行自定义的功能或行为 // my own roma stuff } 4、 存取权限(access level) 继承中的存取权限: 父类可以通过存取权限决定子类是否能够继承某些特定的成员。 四种权限(限制从大到小):private、default、protected、public 存取权限控制了谁可以接触什么。 * public 类型的成员会被继承 * private 类型的成员不会被继承 当子类把成员继承下来时,会把它们当作自己定义的一样。 任一类的成员包含有:自己定义出的变量和方法+从父类继承下来的任何东西 5、 继承的意义 1) 避免了重复的程序代码 2) 定义出共同的协议 类的方法就是”共同协议“ 总结: * 子类时extends父类出来的 * 子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有private类型的变量和方法 * 继承下来的方法可以被覆盖掉,但是实例变量不能被覆盖掉 * 使用 IS-A 测试来验证继承结构的合理性 * IS-A 关系是单方向的 * 当某个方法在子类下中被覆盖过,调用这个方法时,会调用覆盖过的版本。 6、 多态是如何运行的? 第一步:看一般声明引用和创建对象的方法 Dog myDog = new Dog(); 1) 声明一个引用变量: 2) 创建对象 3) 连接对象和引用 重点在于引用类型和对象的类型必须相符。 第二步:在多态下,引用和对象可以是不同类型 Animal myDog = new Dog(); 其中Animal 是 Dog的父类。 运用多态时,引用类型可以是实际对象类型的父类;参数和返回类型也可以多态。 7、 你能够继承任何一个类吗?如果类的成员一样,如果类时私有的,你就不能继承? 答案:内部类还没正式介绍。除了内部类,并没有私有类这样的概念,有三种方法可以防止某个类被作出子类。 第一种:存取控制,不标记为公有。非公有类只能被同一个包的类作出子类。 第二种:final标记符号,表示它是继承树的末端,不能被继承。 第三种:让类只拥有private的构造程序(constructor) 8、 为什么会作出标识:final的类,有什么好处? 一般来说,不会标识出final,除非你需要安全。 9、 可不可以只用final去标识方法,而不使用整个类? 如果你想防止特定的方法被覆盖,可以将该方法标识上 final 这个修饰符。将整个类标识上 final 修饰符表示没有任何方法可以被继承。 10、 遵守合约:覆盖的规则 当你要覆盖父类的方法时,你就得同意履约。 方法就是合约的标识。 * 参数必须一样,且返回类型必须要兼容 子类使用的参数 = 父类使用的参数 子类声明的返回类型或该类型的子类 = 父类声明的返回类型 * 不能降低方法的存取权限 代表存取权限必须相同,或者更开放。比如,你覆盖掉一个公有的方法并将它标记为私有,这会让它以为在编译期通过的是个公有,然后突然在执行期才被java虚拟机阻止存取。 11、 方法的重载(overload) 重载的意义:两个方法名称相同,但是参数不同。 所以重载和继承、多态毫无关系。 * 返回的类型可以不同 * 不能只改变返回类型 如果只有返回类型不同,但参数一样,这是不允许的,编译器不会让这样的事情过关。就算是重载,也要让返回类型是 父类版返回类型的子类。 * 可以更改存取权限

标签:Head,Java,继承,子类,多态,类型,父类,方法
来源: https://www.cnblogs.com/hqq2019-10/p/16214243.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有