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 ...
随机推荐
- P3355 骑士共存问题【洛谷】(二分图最大独立集变形题) //链接矩阵存图
展开 题目描述 在一个 n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入 对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可 ...
- Tpcc-mysql 结果解读
原文:https://blog.csdn.net/frockee/article/details/87812329 1. 填坑经验 不要使用tidb的tpcc测试程序(非标准,tidb修改过),使 ...
- Shell 01 shell概述
1.查看shells:/etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin / ...
- 富文本编辑器粘贴word
很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...
- Codevs 1743 反转卡片(splay)
1743 反转卡片 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description [dzy493941464|yywyzdzr原创] 小A将N ...
- 1628:X-factor Chain
1628:X-factor Chain 时间限制: 1000 ms 内存限制: 524288 KB提交数: 122 通过数: 68 [题目描述] 原题来自 POJ 3421 输 ...
- 虚拟Linux系统使用Windows系统oracle数据库
前提:本地oracle数据库能正常使用. 数据库:oracle 11g 虚拟机:VMware_workstation_full_12.5.2 本机系统:Windows 7 旗舰版 虚拟机系统:open ...
- geth run
geth --networkid 1201 --rpc --rpcapi eth,net,web3,personal,admin,miner --rpccorsdomain "*" ...
- 多线程循环打印ABC
主要是利用线程的wait()和notify()来实现 public class MyThread implements Runnable { private String name; private ...
- LC 987. Vertical Order Traversal of a Binary Tree
Given a binary tree, return the vertical order traversal of its nodes values. For each node at posit ...