Java核心第五章继承
5.1类 超类(父类、基类) 子类(派生类)
使用关键字extends来继承
对于子类想访问父类的私有域,则必须要借助公有接口,在父类中的公有方法正是这样的接口
为了防止子类定义了与父类一样的成员函数,则可以使用特定关键字super来解决:
super.父类的成员函数 super与引用的概念不同 ,它只是一个指示编译器调用超类方法的特殊关键字,并不能将super赋给另一个对象变量
在子类中可以增加域 增加方法 或者覆盖超类的方法,然而绝对不能删除继承的任何域和方法
一个对象变量可以指示多种实际类型的现象被称为多态,在运行时能够自动选择调用哪个方法的现象称为动态绑定。
5.1.1继承层次
继承并不仅限于一个层次。由一个公共超类派生出来的所有类的集合被称为继承层次。在继承层次中,从某个特定的类到其祖先的路径被称为该类的继承链
5.1.2多态
判断是否应该设计为继承关系的规则即“is-a”规则,它表明子类的每个对象也是超类的对象。
5.1.3动态绑定
当程序运行时且采用动态绑定调用方法时虚拟机一定会调用与x所引用对象的实际类型最合适的那个类的方法,并且一层一层向上找
5.1.4阻止继承 :final类和方法
5.1.6抽象类
抽象的父类需要包含抽象的方法。在父类中实现多个子类的共有属性
抽象方法的具体实现在子类中。扩展抽象类有两种选择:
1在子类中定于部分抽象方法或者抽象方法也不定义,这样就必须将子类也标记为抽象类;
另外一种方法是定义全部的抽象方法,这样子类就不是抽象的了。
抽象类不能被实例化,如果将一个类声明为abstract,就不能创建这个类的对象;但是可以创建一个具体子类的对象;
注意:可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象。
5.1.7受保护访问:
超类中的某些方法允许被子类访问,或允许子类的方法访问超类的某个域,为此需要将这些方法或者域声明为protected。
5.2object所有类的超类
Java中,每个类都是有Object类扩展而来的。
可以使用Object类型的变量引用任何类型的对象。Object e=(Employee)obj;
5.2.1 equals方法
检测一个对象是否等于另一个对象
5.3泛型数组列表
在Java中,它允许在运行时确定数组的大小。即使用Java中另一个数组被称为ArrayList的类。它使用起来有点像数组,但是在添加或者删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码.
ArrayList是一个采用类型参数的泛型类。为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面。
下面构造一个保存Employee对象的数组列表:
ArrayList<Employee>staff=new ArrayList<Employee>(); 这被称为菱形语法。
使用add方法将元素添加在数组列表中。如果调用add且内部数组已经满了,数组列表就将会自动创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中。
如果已经清楚或能够估计出数组可能存储的元素数量,就可以在填充数组之前调用ensureCapacity方法:staff.ensureCapacity(100);这个方法调用将分配一个包哈100个对象的内部数组。然后调用100次add,而不要重新分配空间。
size方法将返回数组列表中包含的实际元素数目staff.size();将返回staff数组元素列表的当前元素数量,它等价与数组a的a.length()。
一旦能够确认数组列表的大小不再发生变化,就可以调用trimTosize方法。这个方法将存储区域的大小调整为当前元素数量所需压迫的存储空间数据,垃圾回收期将回收多余的存储空间。
一旦整理了数组列表的大小,添加新元素就需要花费时间再次移动存储块,所以应该在确认不会添加任何元素时,再调用trimToSize.
下面这个技巧可以一举两得,即可以灵活的扩充数组又可以方便的访问数组元素
首先创建一个数组,并且添加所有元素
将Employee【】数组替换成了ArrayList<Employee>注意变化
1不必指出数组的大小
2使用add将任意多的元素添加到数组中。
3使用size()替代length计算元素的数目
4使用a.get(i)替代a【i】访问元素
5.4对象包装器与自动装箱
所有的基本类型都有一个与之对应的类,这些类称为包装器,这些包装器类拥有很鲜明的名字,Integer Long Float Double Short Byte Character Void Boolean。
对象包装器是不可变的,一旦构造了包装器,就不允许更改包装在其中的值。
声明一个Integer对象的数组列表
ArrayList<Interger>List=new ArrayList<>();
并使用add()方法进行自动装箱;而当一个Integer对象赋给一个int值时将会自动的拆箱。
Java核心第五章继承的更多相关文章
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- “全栈2019”Java多线程第五章:线程睡眠sleep()方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第五章:一定会被执行的finally代码块
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java第九十五章:方法中可以定义静态局部内部类吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十五章:Unicode与转义字符
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十五章:流程控制语句中循环语句while
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Think in Java 第四 五 章
Think in Java 第四章 控制执行流程 测试while public class whileTest { static boolean condition(){ boolean result ...
- JAVA基础第五章-集合框架Map篇
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- [core java学习笔记][第五章继承]
5.1 类.超类和子类 定义 class Manager extends Employee { 添加方法和域 } 权限 派生类不能使用基类的私有变量 派生类调用基类的方法 利用super这个关键词 s ...
随机推荐
- 【基础算法-树状数组】入门-C++
目录 基本定义 如何理解树状数组 主要操作 @ 基本定义 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构. ...
- 002_linux驱动之_register_chrdev注册字符设备
(一)解析:register_chrdev函数和unregister_chrdev函数 (二)register_chrdev函数原型 int register_chrdev(unsigned int ...
- 001_linuxC++之_类的引入
(一) C++类的引入,图片的程序比较好看,文中程序不贴出来 (二) 知识点 1. 成员函数的存取权限:公有的(public),保护的(protectd),私有的(private) 2. 第27行th ...
- Oracle 后台进程(五)SMON进程
转载自:刘相兵 Maclean Liu 文章 你所不知道的后台进程 SMON 功能 SMON(system monitor process)系统监控后台进程,有时候也被叫做 system clea ...
- webservice 概念+测试案例
webservice的概念?(一句话概括什么是WebService) WebService是一种跨编程语言.跨操作系统平台的远程调用技术.远程调用技术: 远程调用是指一台设备上的程序A可以调用另一台设 ...
- [Luogu] 兽径管理
题面:https://www.luogu.org/problemnew/show/P1340 题解:https://www.zybuluo.com/wsndy-xx/note/1153773
- MySQL数据分析(7)-试着使用SQL
(一) 1.1 启动服务器 Windows版命令: net start mysql 或者 C:\mysql-5.5.20-winx64\mysql-5.5.20-winx64\mysql Mac版命令 ...
- codeforces gym #101987K -TV ShowGame(2-SAT)
题目链接: https://codeforces.com/gym/101987 题意: 有长度为$n$的只包含$B,R$的字符串 有m种关系,每个关系说出三个位置的确切字符 这三个位置的字符最多有一个 ...
- HDU 4374 One hundred layer(单调队列DP)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=116242#problem/E 题意:差不多就是男人勇下百层的游戏.从第一层到最 ...
- 理解了这些异常现象才敢说真正懂了TCP协议
很多人总觉得学习TCP/IP协议没什么用,觉得日常编程开发只需要知道socket接口怎么用就可以了.如果大家定位过线上问题就会知道,实际上并非如此.如果应用在局域网内,且设备一切正常的情况下可能确实如 ...