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核心第五章继承的更多相关文章

  1. Java核心技术第五章——1.类、超类、子类(2)

    继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...

  2. “全栈2019”Java多线程第五章:线程睡眠sleep()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. “全栈2019”Java异常第五章:一定会被执行的finally代码块

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  4. “全栈2019”Java第九十五章:方法中可以定义静态局部内部类吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第十五章:Unicode与转义字符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第二十五章:流程控制语句中循环语句while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. Think in Java 第四 五 章

    Think in Java 第四章 控制执行流程 测试while public class whileTest { static boolean condition(){ boolean result ...

  8. JAVA基础第五章-集合框架Map篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  9. [core java学习笔记][第五章继承]

    5.1 类.超类和子类 定义 class Manager extends Employee { 添加方法和域 } 权限 派生类不能使用基类的私有变量 派生类调用基类的方法 利用super这个关键词 s ...

随机推荐

  1. Ubuntu 蓝牙鼠标的问题

    问题: 我有一个小巧的蓝牙鼠标,但有一个问题. 当它不使用一段时间时,它会关闭. 好的我得按按钮把它打开. 但是我发现,在我在蓝牙小程序下单击"连接"之前,它不会再被Ubuntu识 ...

  2. MySQL 中Redo与Binlog顺序一致性问题

    首先,我们知道在MySQL中,二进制日志是server层的,主要用来做主从复制和即时点恢复时使用的.而事务日志(redo log)是InnoDB存储引擎层的,用来保证事务安全的.现在我们来讨论一下My ...

  3. 正则regex

    Regual expression 普通正常字符 字符匹配 . 表示任意字符 匹配次数 位置锚定 分组及引用

  4. [USACO10HOL]赶小猪

    嘟嘟嘟 这题和某一类概率题一样,大体思路都是高斯消元解方程. 不过关键还是状态得想明白.刚开始令\(f[i]\)表示炸弹在点\(i\)爆的概率,然后发现这东西根本无法转移(或者说概率本来就是\(\fr ...

  5. 二十三、Linux任务计划及周期性任务执行:at、crontab命令

    一.概述 未来的某时间点执行一次某任务:at, batch周期性运行某任务:crontab 这两个任务的执行结果:会通过邮件发送给用户 (本地终端用户之间的邮件通知) centos 5,6,7默认开启 ...

  6. 编写第一个Servlet程序

    在开始这一节之前呢,我们还需要把Tomcat配置到Eclipse中,配置的方式很简单,打开Eclipse,Window,Preferences,进入到这个页面 将Tomcat的安装目录配置到Eclip ...

  7. C#程序调用CMD执行命令,将参数传递给cmd.exe

    proc.StartInfo.Arguments = "/c ping 10.2.2.125"; C#程序调用CMD执行命令 将参数传递给cmd.exe的(Passing an a ...

  8. Java排序之归并排序

    Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...

  9. 指定版本下载yum离线安装包

    #!/bin/bash releasever=7 for i in salt-minion salt-api salt-master docker-ce docker-ce-cli docker-co ...

  10. IPC远程入侵

    https://mp.weixin.qq.com/s/rQxvp2Sq8E4pBn-E9-COww IPC远程入侵 黑客网络技术 4月19日 一.什么是IPC 进程间通信(IPC,Inter-Proc ...