第七章复用类

Thinking in Java 第四版完整版 第七章练习题 复用类 Thinking in Java 第四版完整版 第七章练习题,记录一下(jdk1.8.0) 1. /** * 练习1:创建一个简单的类。在第二个类中,将一个引用定义为第一个类 * 的对象。运用惰性初始化来实例化这个对象。 * @author admin11 * @date 2018年3月21日 */ class Simple { String s; pu... 阅读详情

1、使用类而不破坏现有程序代码。①只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。②按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种方式称为继承。
7.1组合语法
1、编译器并不是简单地为每一个引用都创建默认对象。如果想要初始化这些引用,可以在下列位置进行:
①在定义对象的地方。这意味着他们总是能够在构造器被调用之前被初始化。
② 在类的构造器中。
③就在正要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。
④使用实例初始化。
7.2继承语法
1、为了继承,一般的骨子额是将所有的数据成员都指定为private,将所有的方法都指定为public。
7.2.1初始化基类
1、基类构造器总会被调用,并在在导出类之前被调用。
2、如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显示地编写调用基类构造器的语句,并且配以适当的参数列表。
7.3 代理
1、将一个成员对象置于所要构造的类中(就像组合),但与此同时在心累中暴露了该成员对象的所有方法(就像继承)
7.4结合使用组合和继承
1、初始化子类构造函数,则其父类构造函数也一定被初始化过。
7.4.1 确保正确清理
1、必须将清理动作置于finally子句之中,以预防异常的出现。
7.4.2名称屏蔽
1、如果Java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽在基类中的任何版本。因此,无论是在该层或者它的基类中对方法进行定义,重载机制都可以正常工作。
7.5在组合与集成之间选择
1、组合和继承都允许在新的类中放置子对象,组合是显式地这么做,而继承则隐式地做。
2、组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形。即,在新类中嵌入某个对象,让其实现所需要的功能,但心累的用户看到的只是为新类所定义的接口,而非锁嵌入对象的接口。
7.6 protected关键字
1、实际项目中,需要将某些事物尽可能隐藏起来,但仍然允许导出类的成员访问。
2、protected:指明“就类用户而言,这是private的,但对于任何继承于此类的导出类或其他任何位于同一个包内的类来说,它却是可以访问的”
7.7 向上转型
7.7.1 为什么向上转型
1、向上转型是从一个较专用类型向较通用类型转换,所以总是很安全的。也就是说,导出类是基类的一个超集。它可能比基类含有更多的方法,但它必须至少具备基类中所含有的方法。在向上转型的过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取它们。
7.7.2再论组合与集成
1、在面向对象编程中,生成和使用程序代码最有可能采用的方法就是直接将数据和方法包装进一个类中,并使用该类的对象。
7.8final关键字
1、final的三种情况:数据,方法和类
7.8.1 final数据
1、一个永不改变的编译时常量
2、一个在运行时被初始化的值,而不希望它被改变
3、一个既是static又是final的域只占据一段不能改变的存储空间。
4、对于基本类型,final使数值恒定不变;而用于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身确实可以被修改的,Java并未提供使任何对象恒定不变的途径。这一限制同样适用数组,它也是对象。
5、根据惯例,既是static又是final的域将用大写表示,并使用下划线分隔各个单词。
6、定义为static强调只有一份;定义为final。说明它是一个常量。
7、空白final:Java允许生成“空白final”,所谓空白final是指被声明诶final但又未被给定初值的域。无论什么情况,编译器都确保空白final在使用前必须被初始化。必须在域的定义处或者每个构造函数中用表达式对final进行赋值,这正是final域在使用前总是被初始化的原因所在。
Final参数
7、Java允许在参数列表中以声明的方式将参数指明为final。这意味着无法在方法中更改参数引用所指向的对象
7.8.2 final方法
1、使用final方法的原因有两个:① 把方法锁定,以防任何继承类修改它的含义。想要确保在继承中使方法行为保持不变,并且不会被覆盖。②效率。
2、类中所有的private方法都隐式地指定为时final的。由于无法取用private方法,所以也就无法覆盖它。可以对private方法添加fina修饰词,但这并不能给该方法增加任何额外的意义。
3、“覆盖”只有在某方法是基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某方法为private,它就不是基类的接口的一部分。它仅是一些隐藏于类中的程序代码,只不过是具有相同的名称而已。但如果在导出类中以相同的名称生成一个public\protected或包访问权限方法的话,该方法就不会产生在基类中出现的“仅具有相同名称”的情况。此时并没有覆盖该方法,仅是生成了一个新的方法。
7.8.3final类
1、当将某个类的整体定义为final时,就表明不能继承该类。对该类的设计永不需要任何变动,或者出于安全的考虑,不希望有子类。
2、Final类的域可以根据个人的意愿选择为是或者不是final。不论类是否被定义成final,相同的规则都适用于定义为final的域。然而,由于final类禁止继承。所以final类中所有的方法都隐式指定为是final的,因为无法覆盖它们。在final类中可以给方法添加final修饰词,但这不会增添任何意义。
7.8.4有关final的忠告
7.9初始化及类的加载
1、每个类的编译代码都存在于它自己的独立文件中,该文件只在需要使用程序代码时才会被加载。一般来说,可以说:“类的代码在初次使用时才加载”。这通常是指加载发生于创建类的第一个对象之时,但是当访问static域或static方法时,也会发生加载。
7.9.1继承与初始化

7.10 总结
1、继承和组合都能从现有类型生成新类型。组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口。

.NET 4.0下HttpWebRequest请求HTTPS报错?试试这个注册表修改方案 本文深入解析.NET 4.0下HttpWebRequest请求HTTPS报错问题,提供注册表修改方案以解决'基础连接已经关闭'错误。通过调整SchUseStrongCrypto注册表项,强制使用TLS 1.2等现代加密协议,确保安全连接。适用于企业环境部署和长期维护建议。 阅读详情

相关推荐

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

继承、组合

不使用继承: 使用继承:

无问西东的博客 1351

SAP 销售订单及发票 利润中心替代 Userexit出口 配置及程序

在跨公司销售业务中,跨公司销售订单的发票时无法从销售订单中将利润中心带到发票中,所以在跨公司的发票创建过程中需要配置出口来获取对应销售订单行项目的利润中心。 事务代码: 0KEM 配置步骤: 1、创建一个新的替代 2、创建一个步骤 3、维护一个先决条件,比如针对于特定工厂 PCASUB-VKBUR = '0001' 4、选择替代程序FORM,FORM必须为指定程序中存在的FORM名 5、编辑替代程序FORM 实现效果: 在程序FORM中打上断点 ...

李威威wiwi的博客 5069

第七章:复用类(上)

一、组合语法 此处组合的意思就是将一个类作为另一个类的成员变量。 惰性初始化:就在正要使用这个对象之前再进行初始化。个人认为此种情况适合于组合,A类中包括B类,那么在A类初始化的时候,如果用不到B类,那么就可以暂时不对其进行初始化,需要使用B类时再进行初始化

outer199 564

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1902

基于PLC的图书馆机器人设计与仿真

本文设计了一种基于PLC的图书馆机器人系统,该系统能提升图书馆自动化管理水平,选用西门子S7-1200系列PLC作为核心控制单元,结合电机驱动、传感器采集以及超声波避障等技术,设计出机器人行走、图书识别与分拣的功能模块,系统借助条形码扫描模块获取图书信息,将其分析后与设定的存放位置做对比,精准达成图书的存取和归还。仿真结果显示,机器人执行任务时运动控制响应时间是0.35秒,避障成功率为98.3%,图书识别准确率高达99.4%,在控制系统方面,运用STEP7-MICRO/WIN软件编程,结合WINCC设计组态

weixin_44553616的博客 1924

Java编程思想读书笔记(7-9)

Java编程思想读书笔记(7-9) 一、复用类 1、组合 ​ 将对象的引用置于新建的类中即可。 ​ 编译器并不是简单的为每一个引用都创建默认对象,这一点是很有意义的,因为若真要那样做的话,就会在许多情况下增加不必要的负担。如果像初始化这些引用,可以在代码中的下列位置进行: 在定义对象的地方。这意味着他们总是能够在构造器被调用之前被初始化。 在类的构造器中。 就在正要使用这些对象之前,这种方式称为...

zw401998526的博客 209

uniapp - [全端兼容] 详解实现国际化多语言切换全流程及示例,全部页面中英文多语言随意切换即时生效,语言切换全项目立即变化可自定义新增各国其他语言,uniApp实现中英文语言切换完整源码教程!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp多语言实现,uni-app项目使用多语言切换功能,中英文切换,uniapp实现中英文语言切换,uniApp实现国际化多语言切换,中文英文之间的更换,Uniapp使用什么插件能支持多种语言,退出后重启依然能让语言保留,设置可切换中英文,uniapp国际化页面双语/顶部导航双语/根据系统语言双语,标题栏文字原生底部菜单tabbar怎么改,使用vue-i18n国际化多国语言,全平台i18n插件,

🏆 前端领域优质创作者 1万+

Java学习笔记之三《复用类》

Java核心思想学习笔记:chapter7-复用类 java中所有问题的解决都围绕类展开,可以by创建新类实现代码复用。 两种复用方法: 组合:将对象引用置于新类中; (类中域为基本类型时,自动初始化为默认零值;为对象引用时,自动初始化为null。) 编译器并不是简单的为每一个引用创建默认对象,可在以下位置对引用进行初始化: 1.定义对象时——so,引用总能在构造器被调用之前完成初

陈小丫的博客 327

MATLAB代码转到FPGA代码

添加完文件之后,需要设置输入的数据类型,设置完之后点击Workflow Advisor。MATLAB文件包含一个功能实现文件和测试文件。对应FPGA中的功能文件和测试文件。然后,将功能文件和测试文件添加到相应位置。然后选择APP中的HDL Coder代码。首先需要编写好MATLAB文件。点击链接,就可以查看你看到的代码。可以自己生成代码的语言类型。

小柚子的博客 3062

uniapp - H5人脸识别认证与活体检测功能(纯前端免费方案+微信sdk人脸识别)完整源码,微信公众号网页/h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp源码

uniapp实现人脸认证,uniAPP h5手机拍照+人脸识别,免费人脸识别插件,前端人脸识别解决方案,uniapp H5人脸识别带前后摄像头,人脸识别在H5页面进行采集,微信公众号H5人脸核身,H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,uniapp人脸监测,uniapp人脸生物监测,使用uniapp开发H5人脸采集功能/人脸识别功能,uniapp项目—h5端人脸采集功能实现,uniapp vue3人脸核身,H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信

🏆 前端领域优质创作者 3809

thinking in java 笔记 思维导图 第七章 复用类

mythling的专栏 429

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2838

第七章 复用类

文章目录1.组合语法2.继承语法初始化基类3.代理4.结合使用组合和继承确保正确清理名称屏蔽5.在组合和继承之间选择6.Protected关键字7.向上转型为什么称为向上转型应该用组合还是继承?8.Final关键字final数据final方法9.初始化及类的加载继承于初始化 1.组合语法 定义:只需要在新类中产生现有类 惰性初始化:先定义引用,在使用对象的时候再进行初始化 2.继承语法 定义:按照现有类类型创建新类 初始化基类 (1) 除非明确指出从其他类继承,否则就是在隐式的从Java的标准

小名同学 22万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java学习:第七章复用类

1,组合2,继承。

生物医学工程学生的博客 1637

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

第七章:复用类

第七章:复用类 复用代码 ​ 复用代码在编程语言中是非常重要的部分,减少代码的臃肿和冗余。Java中常见的复用代码有两种,不破坏现有类的代码,因为已经经过调试①组合:在新类中产生现有类的对象,从而调用现有类的方法,达到复用效果(方法是public修饰或同包)。②继承:继承现有类型,直接添加新代码或者对父类方法进行覆盖 组合是讲现有类型作为新类型的底层实现加以复用,而继承复用的是接口 一、 组合语法...

jue6628的博客 301

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java 编程思想 - 第七章 复用类

Java编程思想学习笔记第七章 复用类1.组合2.继承 第七章 复用类 1.组合 概念:在新类中产生现有类对象。 PS:每一个类都有一个toString()方法,而且当编译器需要一个String时而代码中却只有一个对象,该方法就会被调用。例如: Student stu = new Student(); System.out.print("Student info:"+stu); 组合语法对象初始...

weixin_40455074的博客 522

《Java编程思想》读书笔记:第七章 复用类

目录7.1组合语法7.2继承语法7.2.1初始化基类7.3代理7.4结合使用组合和继承7.4.1确保正确清理7.4.2名称屏蔽7.5在组合与继承之间选择7.6protected关键字7.7向上转型7.7.1为什么称为向上转型7.7.2再讨组合与继承7.8final关键字7.8.1final数据7.8.2final方法7.8.3final类7.8.4有关final的忠告7.9初始化及类的加载7.9.1继承与初始化 Java中所有事物一样,问题解决都是围绕着类展开的。可以通过创建新类来复用代码,而不必再

Mr_Kian的博客 930
上一篇: 第六章访问权限控制
下一篇: 第八章多态
PandaHust
博客等级 码龄11年 6粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值