Java继承

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

与继承有关的注意事项
继承是单方向的, 继承是单方向的,即派生类可以继承和访问 基类中的成员, 基类中的成员,但基类则无法访问派生类中 的成员; 的成员; 中只允许单一继承方式, 在Java中只允许单一继承方式,即一个派生 中只允许单一继承方式 类只能继承于一个基类,而不能象C++中派 类只能继承于一个基类,而不能象 中派 生类继承于多个基类的多重继承方式。 生类继承于多个基类的多重继承方式。
本章目标
对象数组(补充) 对象数组(补充) 理解什么是继承 中实现继承, 在Java中实现继承,extends关键字 中实现继承 关键字 4种访问控制权限 种访问控制权限
public protected private 缺省
继承中的构造方法 super关键字 关键字
对象数组
中不但可以声明由原始数据组成的数组, 在Java中不但可以声明由原始数据组成的数组, 中不但可以声明由原始数据组成的数组 还可以声明由对象组成的数组; 还可以声明由对象组成的数组; 声明对象数组的方式如: 声明对象数组的方式如:
实现继承示例
class Person { //定义人类 定义人类 public String mName; //姓名 姓名 public int mAge; //年龄 年龄 public void dining() { System.out.println("吃饱了 吃饱了..."); } //吃饭的方法 吃饱了 吃饭的方法 } class Student extends Person { //学生类继承于人类 学生类继承于人类 public float mGrade; //成绩 成绩 public void examination() { System.out.println("考试及格了 考试及格了..."); } 考试及格了 } class Teacher extends Person { //教师类继承于人类 教师类继承于人类 public float mSalary; //薪水 薪水 public void prelection() { System.out.println("上课很累 上课很累..."); } 上课很累 }
第 四 章 (上)
继 承
回顾
方法重载应遵循三大原则; 方法重载应遵循三大原则; 适当地重载构造方法, 适当地重载构造方法,可以使初始化对象的方式 更为灵活; 更为灵活; this引用总是指向调用成员方法的对象本身; 引用总是指向调用成员方法的对象本身; 引用总是指向调用成员方法的对象本身 静态成员(包括静态成员属性和静态成员方法) 静态成员(包括静态成员属性和静态成员方法) 属于类而不是属于某个对象, 属于类而不是属于某个对象,可以在实例化对象 之前通过类名访问; 之前通过类名访问; 使用package关键字打包; 关键字打包; 使用 关键字打包 使用import关键字导入包或类。 关键字导入包或类。 使用 关键字导入包或类
源文件DerivedClass.java 源文件
package mypkg; public class DerivedClass extends BaseClass { public void fun() { pubA = 10; √ proB = 20; √ defC = 30; √ priD = 40; × } }
本章相关词汇(蓝色为关键字)

protected extends super access inheritance base class derived class modifier


受保护的 扩充, 扩充,扩展

上一级的, 上一级的,超级的 访问 继承, 继承,遗传 基类/父类 基类 父类 子类/派生类 子类 派生类 修饰符
//考试的方法 考试的方法
//上课的方法 上课的方法
public class InheritanceDemo { //该类用于容纳 该类用于容纳main方法 该类用于容纳 方法 public static void main(String[] args) { //实例化学生对象 Student std = new Student(); 实例化学生对象 std.mName = "张三 张三"; std.mAge = 18; //为姓名和年龄赋值,访问的是父类中的成员 为姓名和年龄赋值, 张三 为姓名和年龄赋值 std.dining(); //调用吃饭的方法,访问的是父类中的成员 调用吃饭的方法, 调用吃饭的方法 std.examination(); //调用考试方法,访问的是子类中的成员 调用考试方法, 调用考试方法 Teacher tea = new Teacher(); //实例化教师对象 实例化教师对象 tea.mName = "谭浩强 谭浩强"; tea.mAge = 65; 谭浩强 tea.dining(); tea.prelection(); } }
访问修饰符
public
不受任何限制, 不受任何限制, 本类或非本类均 可随意访问。 可随意访问。
Hale Waihona Puke Baidu
protected
本类及其子类可以访问 父子友好), ),同一个包 (父子友好),同一个包 中的其它类也可访问( 中的其它类也可访问(包 内友好)。 内友好)。
缺 省
只有相同包中的 类可以访问( 类可以访问(包 内友好)。 内友好)。
本类 同包子类 同包非子类 不同包子类 不同包且非子类
课堂练习1
源文件BaseClass.java 源文件
package mypkg; public class BaseClass { public int pubA; protected int proB; int defC; private int priD; }
在Java中实现继承
中实现继承需要使用到extends关键字; 关键字; 在Java中实现继承需要使用到 中实现继承需要使用到 关键字 实现继承的一般语法是: 实现继承的一般语法是:
[访问修饰符 class 派生类名 extends 基类名 { 访问修饰符] 访问修饰符 成员列表 }
如: class Student extends Person { …… }
田七 19
面向对象的三大特征
面向对象的程序设计有三大特征: 面向对象的程序设计有三大特征:
封装: 封装:解决了数据的安全性问题 继承: 继承:解决了代码的重用问题 多态: 多态:解决了程序的扩展问题
前面的章节我们已经学习了有关于封装的各 个概念,这一章我们来讨论第二大特征—— 个概念,这一章我们来讨论第二大特征 继承。 继承。
private
只有本类可以访问, 只有本类可以访问, 其余都不可以。 其余都不可以。
访问控制权限(列表)
访问修饰符 位 置
public 可以 可以 可以 可以 可以
protected 可以 可以 可以 可以 不可以
缺省 可以 可以 可以 不可以 不可以
private 可以 不可以 不可以 不可以 不可以
struct Student **p = NULL; p = (struct Student**)malloc(5 * sizeof(struct Student*)); //只是声明了一个指针数组,没有任何实际的结构体变量 只是声明了一个指针数组, 只是声明了一个指针数组
对象数组==引用数组
错误的理解方式 栈 堆
继承的作用(续)
继承是能自动传播代码和重用代码的有力工 具; 继承能够在某些比较一般的类的基础上建造、 继承能够在某些比较一般的类的基础上建造、 建立和扩充新类; 建立和扩充新类; 能减少代码和数据的重复冗余度, 能减少代码和数据的重复冗余度,并通过增 强一致性来减少模块间的接口和界面, 强一致性来减少模块间的接口和界面,从而 增强了程序的可维护性; 增强了程序的可维护性; 能清晰地体现出类与类之间的层次结构关系。 能清晰地体现出类与类之间的层次结构关系。
基类 方法和属性 派生类 基类方法 + 附加方法
大学系统人员分类树

学生
老师
大学生
研究生
继承的概念(续)
最高层是最普遍的、最一般的情况, 最高层是最普遍的、最一般的情况,往下每 一层都比上一层更具体, 一层都比上一层更具体,并包含有高层的特 征,通过这样的层次结构使下层的类能自动 享用上层类的特点和性质; 享用上层类的特点和性质; 继承其实就是自动地共享基类中成员属性和 成员方法的机制。 成员方法的机制。
//假设已经定义了一个 假设已经定义了一个Student类 类 假设已经定义了一个 /*声明由5个Student对象组成的数组 /*声明由5个Student对象组成的数组*/ 对象组成的数组*/ 声明由 Student[] stdAry = new Student[5];
但上述方式类似于C语言中的: 但上述方式类似于 语言中的: 语言中的
继承的作用
当今软件设计的特征: 当今软件设计的特征:
软件规模越来越大; 软件规模越来越大; 软件设计者越来越多; 软件设计者越来越多; 软件设计分工越来越细。 软件设计分工越来越细。
引入继承,实现了代码重用; 引入继承,实现了代码重用; 引入继承,实现了递增式的程序设计。 引入继承,实现了递增式的程序设计。
学生对象的实例 学生对象的实例 学生对象的实例 学生对象的实例 学生对象的实例 0 1 2 3 4 stdAry
正确的理解方式 栈 堆
对象的引用 对象的引用 对象的引用 对象的引用 对象的引用 0 1 2 3 4 stdAry
对象数组示例
/*对象数组示例,假设已经定义了Student类*/ 对象数组示例,假设已经定义了 对象数组示例 类 public static void main(String[] args) { /*创建包含有 个Student引用的数组 创建包含有5个 引用的数组*/ 创建包含有 引用的数组 Student[] stdAry = new Student[5]; /*逐一为每个引用创建对象实例 逐一为每个引用创建对象实例*/ 逐一为每个引用创建对象实例 stdAry[0] = new Student("张三 张三", 张三 stdAry[1] = new Student("李四 李四", 李四 王五", stdAry[2] = new Student("王五 王五 stdAry[3] = new Student("郑六 郑六", 郑六 田七", stdAry[4] = new Student("田七 田七 18); 20); 24); 21); 19);
类成员的访问控制权限
信息隐藏是面向对象程序设计的重要特点之一, 信息隐藏是面向对象程序设计的重要特点之一, 它可以: 它可以:
防止类的使用者意外损坏数据; 防止类的使用者意外损坏数据; 对任何实现细节所作的修改不会影响到使用该类的其它 代码; 代码; 使类更易于使用。 使类更易于使用。
中实现信息隐藏的是访问控制权限机制; 在Java中实现信息隐藏的是访问控制权限机制; 中实现信息隐藏的是访问控制权限机制 访问控制权限包括4个访问修饰符 个访问修饰符: 访问控制权限包括 个访问修饰符:public、 、 protected、private和缺省; 和缺省; 、 和缺省 可以使用上述访问修饰符修饰类的成员。 可以使用上述访问修饰符修饰类的成员。
继承的概念
在现实生活中的继承, 在现实生活中的继承,可以理解为儿子继承了父 亲的财产,即财产重用; 亲的财产,即财产重用; 面向对象程序设计中的继承,则是代码重用; 面向对象程序设计中的继承,则是代码重用; 继承是利用现有的类创建新类的过程, 继承是利用现有的类创建新类的过程,现有的类 称作基类 或父类),创建的新类称作派生类 基类( ),创建的新类称作 称作基类(或父类),创建的新类称作派生类 子类)。 (子类)。
for (int i = 0; i < stdAry.length; i++) { stdAry[i].display(); } }
对象数组的存放形式
栈 stdAry 堆
李四 张三 18 王五 24 郑六 0 1 2 3 4 stdAry[0] stdAry[1] stdAry[2] stdAry[3] stdAry[4] 21 20
相关文档
最新文档