【Head First Java 读书笔记】(七)继承
继承与多态
了解继承
继承的关系意味着子类继承了父类的实例变量和方法。
父类比较抽象,子类比较具体。
继承层次的设计
- 找出具有共同属性和行为的对象(用继承来防止子类中出现重复的程序代码)
- 设计代表共同状态与行为的类
- 决定子类是否需要让某项行为(也就是方法的实现)有特定不同的运行方式,即方法由子类覆盖
- 通过寻找使用共同行为的子类来找出更多抽象化的机会。
“是一个”与”有一个”
当一个类继承自另外一个类时,我们会说这是子类去继承父类。若你想要知道某物是否应该要继承另一物时,则可以用is-a测试来检验。
is-a测试适用在继承层次的任何地方。如果你的继承层次树设计得很好,那么多有的子类都应该通过任意个上层父类的IS-A测试。
如果类Y是继承自类X,且类Y是类Z的父类,那么Z应该能够通过IS-A X的测试。
子类能继承下来哪些东西?
4种权限:private default protected public
存取权限(access level)控制了谁可以接触什么。
public类型的成员会被继承
private类型的成员不会被继承
要点:
- 子类是extends父类出来的
- 子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有private类型的变量和方法
- 继承下来的方法可以被覆盖掉,但实例变量不会被覆盖掉
- 使用is-a测试来验证继承结构的合理性
- is-a关系是单方向的。河马是动物,但动物不一定是河马
- 当某个方法在子类中被覆盖过,调用这个方法会调用到覆盖过的版本
- 如果类Y是extends类X,且类Y是类Z的父类,则Z应该能通过IS-A X的测试。
继承的意义
通过设计继承的过程累积面向对象的经验值。
通过提取出一组类间共同的抽象性,能够排除掉重复的程序代码而将这个部分放在父类,如此一来,如果有共同的部分需要修改,那么就只需改一个地方,不需要动子类。
- 避免重复的程序代码
- 定出共同的协议
多态
多态下,引用类型与对象可以是不同的类型
运用多态时,引用类型可以是实际对象类型的父类
参数和返回类型也可以多态,如果方法参数声明为父类类型,那么在运行时可以传入任何的子类对象。
问题
你能够继承任何一个类么?就像类的成员一样如果类是私有的你就不能继承?
有三种方法可以防止某个类被作为子类
第一种是存取控制:就算类不能标记为私有的,但它还是可以不标记公有。非公有的类只能被同一个包的类作出子类。
第二种是使用final这个修饰符,这表示它是继承的末端,不能被继承
第三种是让类只拥有private的构造程序
为什么会做出标识final的类,这样有什么好处?
一般来说,不会标识final,但如果需要安全-确保方法都是你写的版本,此时就需要final
可不可以只用final去标识方法而不是用整个类
如果想防止特定的方法被覆盖,可以将该方法标识上final这个修饰符,将整个类标识为final表示没有任何的方法可以被覆盖
覆盖的规则
- 参数必须要一样,且返回类型必须要兼容
- 不能降低方法的存取权限:存取权限必须相同,或者更为开放。
方法的重载(overload)
重载的意义是两个方法的名称相同,但参数不同,所以重载与多态毫无关系
重载版的方法只是刚好有相同名字的不同方法,它与继承或多态无关,重载的方法与覆盖方法不一样。
- 返回类型可以不同
- 不能只改变返回类型
- 可以更改存取权限
【Head First Java 读书笔记】(七)继承的更多相关文章
- Java 读书笔记 (七) 变量
Java语言中, 所有的变量在使用前必须声明.声明变量的基本格式: type identifier [ =value],[,identifier [=value]...]; 声明变量的实例,有些包含了 ...
- think in java 读书笔记 2 —— 套接字
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- head first java读书笔记
head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...
- think in java 读书笔记 3 —— 数据报
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...
- think in java 读书笔记 1 ——移位
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...
- Java基础笔记-抽象,继承,多态
抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...
- Java读书笔记1
Java逍遥游记读书笔记 前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java ...
- java读书笔记二
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...
- Effective Java读书笔记完结啦
Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...
随机推荐
- 枚举生成1~n的排序
/*枚举生成1~n的排列*/ #include <iostream> #include<algorithm> #include<queue> #include< ...
- [Python] WeChat_Robot
在微信中接入一个聊天机器人 1. WeChat 个人接口itchat 2. 图灵机器人 #-*- coding:utf-8 -*- import itchat import requests apiU ...
- Java Ant Build详解
转载地址:http://www.cnblogs.com/wufengxyz/archive/2011/11/24/2261797.html 1,什么是antant是构建工具2,什么是构建概念到处可查到 ...
- LeetCode题解 #8 String to Integer (atoi)
又是一道恶心的简单题. 一开始没想到这么多情况的,幸好LeetCode是个很人性化的oj,能让你知道你在哪个case上错了,否则一辈子都过不了. 考虑不周到只能一个个补了. 列举一下恶心的case / ...
- 【转】RocketMQ事务消费和顺序消费详解
RocketMQ事务消费和顺序消费详解 转载说明:该文章纯转载,若有侵权或给原作者造成不便望告知,仅供学习参考. 一.RocketMq有3中消息类型 1.普通消费 2. 顺序消费 3.事务消费 顺序消 ...
- Redis 主从同步配置
主从功能: 为了防止 Redis 磁盘损坏,导致数据丢失,Redis 提供了复制功能,将一个主数据库的数据自动同步到从数据库,防止数据丢失. 同时还可以配置一主多从来分担主压力,主只接受写的操作,将读 ...
- java 蓝桥杯算法提高 字串统计
思路:这道题用HashMap来保存枚举的字串,key值保存字串-value值保存字串所出现的次数: 通过for循环并使用subString()方法枚举所有符合要求的子串maxStr记录 ...
- Spark之 RDD
简介 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合. Resilien ...
- Android中自定义ListView实现上拉加载更多和下拉刷新
ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...
- 【BZOJ3238】差异【后缀自动机+dp】
题意 分析 这个题目还是很优秀的.sigma(len(Ti)+len(Tj))的值是一定的=n*(n+1)*(n-1)/2.那么关键就是求任意两个后缀的lcp的和了. 我们怎么求两个后缀的lcp?如果 ...