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. Appium自动化测试教程-自学网-monkey简介

    Monkey简介 在Android的官方自动化测试领域有一只非常著名的“猴子”叫Monkey,这只“猴子”一旦启动,就会让被测的Android应用程序像猴子一样活蹦乱跳,到处乱跑.人们常用这只“猴子” ...

  2. 001_C#我的第一个串口上位机软件

    (一)首先感谢杜洋工作室 < 入门 C#设计 >带来的视频教学 (二)本次设计从会单片机但是又不会上位机又想搞简单上位机的人群角度提供教程 (三)本次教程的目的是制作普通的串口软件,从而实 ...

  3. Oracle 审计 部署监控 user DML操作

    1.移动audit表及索引到dbadmin表空间 alter table aud$ move tablespace DBADMIN;alter table AUDIT$ move tablespace ...

  4. MONGODB 数据库回复备份

    1.导出工具:mongoexport     1.概念:         mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指 ...

  5. Python学习日记(十)—— 杂货铺(全局变量补充、Python参数传递、字符串格式化、迭代器、生成器)

    全局变量补充 python自己添加了些全局变量 print(vars()) """结果: {'__name__': '__main__', '__doc__': None ...

  6. mysql启动关闭脚本

    #!/bin/sh mysql_port= mysql_username="root" mysql_password="" function_start_mys ...

  7. Apache Flink - 分布式运行环境

    1.任务和操作链 下面的数据流图有5个子任务执行,因此有五个并行线程. 2.Job Managers, Task Managers, Clients Job Managers:协调分布式运行,他们安排 ...

  8. JS获取div高度的方法

    有时在写页面时,需要获取一个div的高度.怎么才能获取呢?哈哈,先上结论.有两种方法. offsetHeight .clientHeight getComputedStyle offsetHeight ...

  9. python与统计(龙族版)

    因为我很喜欢龙族,额........我也很喜欢python这门语言.然后就结合了一下,用python了解了一下龙族四本书的人物出场次数及排名. <龙族1火之晨曦> 路明非 1877 诺诺 ...

  10. 调用subprocess 使用logging打印日志

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Henry 17607168727@163.com import sys import lo ...