Think in Java 复用类(第7章) 读书笔记

2023-11-04

第7章 复用类

1.组合语法

在新类中产生现有类的对象。由于新类是由现有类的对象组成的,所以这种方法称为组合。

 

2.继承语法

按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码。

除非已经明确从其他类中继承,否则就是隐式的从Object中继承。

+= 操作符被重载用来处理String对象,另一个是 +。

 

2.1初始化基类

当创建了一个子类的对象时,该对象中包含了基类的子对象,这个子对象被包装在子类对象内部。

Java会自动在子类的构造器中插入对基类的默认构造器的调用。但是如果基类没有默认构造器,就必须在子类构造器中显式的调用基类的带参构造器。

public class A {
    public A(int a){
        System.out.println(a);
    }
}

public class B extends A {
    public B(int a){
        super(a);//显式调用基类带参构造器
    }
}

 

3.名称屏蔽

Java不会屏蔽父类的同名方法,子类可以调用自己重载的方法。

public class Homer {
    char doh(char c){
        System.out.println("char:"+c);
        return c;
    }

    float doh(float f){
        System.out.println("float:"+f);
        return f;
    }
}

public class Milhouse {}

public class Bart extends Homer {
    void doh(Milhouse m){
        System.out.println("doh(Milhouse)");
    }
}

public class Hide {
    public static void main(String[] args) {
        Bart b = new Bart();

        b.doh('c');
        b.doh(new Milhouse());
        b.doh(1.3f);
        b.doh(1);
    }
}

//输出
//char:c
//doh(Milhouse)
//float:1.3
//float:1.0

重写与重载的区别:

方法签名:方法名称和参数类型。

重写:

    ①方法签名一样。参数列表必须一样,但是返回类型可以是父类方法返回类型的子类。

    ②权限子类不能小于父类。

    ③final、static方法不能被重写,但static方法可以被重新声明。

    ④子类抛出的检查异常不能比父类大。

    ⑤构造方法不能被重写。构造器其实是类的静态方法。

重载:

    ①有不同的参数列表。

    ②返回的类型可以相同。

    ③权限不作限制。

    ④抛出的异常不收限制。

 

4.final关键字

4.1final变量

4.1.1 final成员变量

①final修饰基本数据类型,会使其数值恒定不变,而且必须赋初值,可在构造器中或初始化块中赋值。

②修饰引用类型,会使其指向的引用不变即不能再指向另一个引用,但引用的对象可以修改,必须赋初值,可在构造器中或初始化块中赋值。

③被final修饰的变量不能被

/*
* 1所有的byte型. short型和char型将被提升到int型(例外: final修饰的short, char变量相加后不会被自动提升。)
* 2如果一个操作数是long形 计算结果就是long型;
* 3如果一个操作数是float型,计算结果就是float型;
* 4如果一个操作数是double型,计算结果就是double型;
*/

byte a = 1;
int b = 1;

byte in = a+b;//报错

final byte a = 1;
byte in = a + b;//不报错

4.1.2 final局部变量

①使用final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。

②给局部变量赋初始值时,只能一次,不能重复。

4.2final方法

final修饰的方法不能被继承。

类中所有的 private方法被隐式的指定为final,但是如果覆盖一个private方法编译器并不会报错。原因如下:

①覆盖只有在某方法是基类的接口的一部分的时候才会发生。

②如果方法是private,则不是基类的一部分。

 

4.3final类

将类定义为 final,以为这你对该类的设计永远不需要做任何改动,也不能有子类。

 

4.4final参数

方法体内不能修改参数的值。参数的值在方法体内是不能被修改的。

需要注意的是被匿名内部类访问的成员变量和参数需要加上final。原因见:匿名内部类访问的变量final修饰符问题

 

5.类的初始化与加载

类在初次使用时才会被初始化。初次使用有以下几种情况:

    ①new 关键字,但 A a = new A[2]这种并不会导致初始化,只是表示开辟空间。

    ②访问静态变量、方法,访问静态常量并不会导致初始化。

    ③对类进行反射操作如: Class.forName()。

类的加载:

    1.加载

    2.连接: ①验证 ②准备 ③解析

    3.初始化

类的加载是双亲委派机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Think in Java 复用类(第7章) 读书笔记 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url

随机推荐

  • Redis最全教程—从入门到精通

    Redis 备注 个人学习笔记 是学习B站上的狂神说Java的课程摘录的笔记 视频地址 https www bilibili com video BV1S54y1R7SB B站up主 狂神说Java 笔记参考来源 微信公众号 狂神说 Nos
  • 使用fastreport4经验小谈

    1 fastreport 属性窗口如何找回来 打开报表 frxreport 查看 view gt 选项 options gt 恢复默认值 restore defaults 2 我们查看报表输出时 从第二页不能清晰的看出订单数据是那个客户的数
  • MyEclipse添加反编译插件jadClipse--通用--超好+部署文档,傻瓜版

    MyEclipse添加反编译插件jadClipse 通用 超好 部署文档 傻瓜版 下载地址 https download csdn net download u014246526 10406292 效果图如下
  • Github Copilot 的补强工具Github Copilot Labs的常用功能介绍

    一 什么是Github Copilot Labs Github Copilot Labs是由GitHub推出的一款基于人工智能技术的代码协作工具 旨在协助开发者更加快速 高效地编写代码 该工具使用了机器学习技术 通过学习大量的开源代码和编写
  • Linux下Hadoop的介绍

    hadoop官网 http hadoop apache org 一 初始Hadoop 1 Hadoop是什么 Hadoop是Apache开源组织的一个分布式计算框架 可以在大量廉价硬件设备组成的集群上运行应用程序 并为应用程序提供一组稳定可
  • 最大间隙问题

    问题描述 最大间隙问题 给定n个实数 求这n个数在实轴上相邻2个数之间的最大差值 设计解最大间隙问题的线性时间算法 算法分析 问题很简单 而且描述本身就暗示了一种自然的求解方法 即先对元素排序 然后逐个求相邻元素的间距 这种解法的复杂度为O
  • Linux CentOS 修改MySQL安装目录

    安装MySQL 使用yum和Mysql官方源下载 安装方法参见 点此查看 Mysql 5 7源 修改Yum源 参照这里 修改安装目录 说明 仅针对还没有数据库数据的情况 有数据的请谨慎操作 虽然其实步骤似乎差不多 安装后的MySQL默认路径
  • linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器

    windows 远程 linux桌面系统 windows7 CentOS release 6 9 1 安装 yum install xrdp 2 启动服务 service xrdp start 3 服务加入开机启动项 chkconfig x
  • MRTK-Unity学习记录

    TextMeshPro生成中文字体 Window TextMeshPro Font Asset Creator 1 Source Font File C盘 Windows Fonts 选择需要的字体文件 2 Atlas Resolution
  • Linux下安装Nginx

    一 什么是Nginx Nginx engine x 是一个高性能的 HTTP和反向代理服务器 也是一个 IMAP POP3 SMTP 服务器 正向代理 反向代理 很多大网站都是使用nginx做反向代理 应用非常广泛 Nginx是一款高性能的
  • Spring Boot 中的静态资源是什么,如何使用

    Spring Boot 中的静态资源是什么 如何使用 在 Web 应用程序中 静态资源通常是指不会动态生成的文件 例如图片 CSS JavaScript 文件等 Spring Boot 提供了一种简单的方式来处理这些静态资源 让我们可以更加
  • SpringMVC手写-核心逻辑

    文章目录 注解解析过程DispatcherServlet web xml Controller 自定义注解 从网上看到了SpringMVC实现的最简单版本 大致体现了核心逻辑 1 实现HttpServlet实现web请求访问 2 在实际处理
  • 批量获取力扣做题量工具

    这是一个批量统计国内版LeetCode做题量的工具 写这个小工具的起因是我们实验室准备每周统计大家leetcode的做题量 我们实验室十几个人 如果一人一个人看 太费时间了 作为高效程序员这不是我们做事的风格 于此就有了这个小工具 对于平常
  • matlab 基于密度的聚类算法,基于密度DBSCAN的聚类算法

    聚类算法概念 聚类分析又称群分析 它是研究 样品或指标 分类问题的一种统计分析方法 同时也是数据挖掘的一个重要算法 聚类 Cluster 分析是由若干模式 Pattern 组成的 通常 模式是一个度量 Measurement 的向量 或者是
  • mysqldump使用方法(MySQL数据库的备份与恢复)

    mysqldump使用方法 MySQL数据库的备份与恢复 mysqldump help 1 mysqldump的几种常用方法 1 导出整个数据库 包括数据库中的数据 mysqldump u username p dbname gt dbna
  • TCP三次握手

    三次握手指的是TCP协议建立连接的过程 当客户端请求与服务器建立TCP连接时 必须要经过三次握手才能真正建立连接 三次握手详细过程 第一次握手 客户端向服务器发送 SYN 报文 请求建立连接 其中 SYN 标志位被置为 1 同时客户端随机选
  • eclipse在java环境基础上配置C++环境(MinGW安装包+详细步骤)

    前言 在eclipse开发java的基础上 又不想再下一个c 的编辑器 如何实现java与c 的转换 博主整了两天 踩了好多坑 整理出来帮助大家 第一步 在eclipse里下载CDT 打开以后需要一点时间 搜索CDT 等待下载完成 补充说明
  • mac在pytorch环境下装transformer并成功实例运行

    主要是想成功运行下面这个安装步骤 https huggingface co transformers installation html installing from source 一 进入环境 conda activate pytorc
  • RuntimeError: cublas runtime error : unknown error at C:/w/b/win…cu:225

    报错 分析原因 GPU不够用 把数组改小就可以正常运行 或者改为在CPU上运行
  • Think in Java 复用类(第7章) 读书笔记

    第7章 复用类 1 组合语法 在新类中产生现有类的对象 由于新类是由现有类的对象组成的 所以这种方法称为组合 2 继承语法 按照现有类的类型来创建新类 无需改变现有类的形式 采用现有类的形式并在其中添加新代码 除非已经明确从其他类中继承 否