当前课程知识点:“做中学”Java程序设计 >  第4章使用面向对象高级语法 >  4.1使用继承语法 >  Video

返回《“做中学”Java程序设计》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《“做中学”Java程序设计》慕课在线视频列表

Video课程教案、知识点、字幕

在前面的时钟应用程序当中我们学会了如何在一个类当中添加属性和方法

为了保证这些数据的安全

通常需要通过访问权限控制符来限定外接对数据成员的直接访问

取而代之的呢由相应的方法进行数据的访问操作

从而实现了面向对象的的第一大特性-封装性

事实上我们的一个应用程序呢 需要由无数个不同职责的类来构成

他们协同工作才能完成某个具体业务的实现

今天的我们就来聊聊面向对象的第2大特性

继承性

这种关系那可以理解为一种is-a的关系

它体现的是一种特殊的类和类之间的关系

当两个类满足继承关系的时候

我们可以看看他是否符合这种is-a的表达

例如圆是一个图形

我们就可以表达成circle is a shape

所以圆这个类和shape这个类

他是符合继承关系的

这里的Circle是一个子类

或者也称之为派生类

相应的shape就是他的父类

有些时候也称之为超类

或者是基类

在工程当中

我们习惯使用uml工具对类的关系的进行节目下面的这张图就是circle继承

shape类图

这里的矩形代表定好的类

每个矩形通常分成三部分

第1个部分显示的是类名

第2部分的显示是类的属性

第3部分的显示类的方法

继承关系让我们用一根直线加空心箭头的线条来表达这里的箭头呢

从子类出发指向我们的父类

需要注意的是Java当中继承是单一继承

也就说每个子类

有且只能有一个父类继承有一个非常有这种功能就是让子类可以轻松的获得

父类所有的属性和方法

也就说如果你的父类当中实现了某个功能只为那可以通过继承来复用这些代码

与继承有关的一个

重要的访问权限控制服务是protected

当它作用于属性和方法的前面的时候

表明这个属性或者这个方法呢

他是可以被继承的

能够在子类当中直接访问和使用的

要将uml类图当中的系数关系用代码来实现的话

需要使用继承的语法规则

非常简单

只需要在子类的类声明部分使用extends

关键字

随后紧跟一个父类的名字

这样就可以表达

继承了关系

通常我们也将这种写法称之为显示的继承写法

那么这里就需要特别注意的是

当我们定一个类

如果你不显示的声明一个继承关系的时候

其实那他会隐含的存在一个默认的继承关系

那就是继承Object

是Java当中所有类的父类

任何那那都是直接或者间接的继承与他的

自然的

Object中定义的所有的方法

对于所有子类来讲他们都隐式的继承

这里等我没有必要介绍一下不正当中的常用方法

第1个是toString方法

这个方法的定义在object当中他的默认实现就是返回对象的hashcode

内存地址

比如你可以在Java程序当中打印出任何对行的信息

这里那我们可以学生对象为例

当我们使用system.out.println输出学生对象信息的时候其实调用的就是

对象天生自带的toString方法

这个方法那就是默认的继承于Object

他的默认实现就是打印出对象的内存当中的hash地址

hash地址是通过哈希算法生成的一个标识

就像每个对象的身份证号一样

你可以通过比较两个对象的hash地址

来判断这两个对象是否来自于内存当中的同一个对象

继承除了简单的复用父类的现有的代码功能之外

你还可以对继承方法的进行覆盖

我们称之为为override

需要注意的是只有那些非private方法

才能实现覆盖

比如使用toString输出学生的

hashCode内存地址不是我们学生信息管理系统的现实需求

我可以将其覆盖成打印学生对象的基本信息

那么我们来看下具体的操作

单击source菜单下

下面有一个override/Implement methods选项

单击该选项

在弹出的覆盖的方法当中我们看到现有的方法当中 有一个toString选项打勾选起来

我们要对他进行覆盖

单击OK

这时候就会生成一个覆盖的框架

这里来我们将它返回一个由student基本信息构成的字符串

再次运行我们的程序我们看到这时候我们的程序打印出来的就是对象的基本性

第2个重要的方法能就是equals方法从名字上你可以判断

这个方法的作用了就是判断自身的对象

和传入的参数对象

他们是否相等的一个重要方法

但是很多时候

我们需要自己去定义相等性的依据

例如

在我们学生信息管理系统当中

用户当前操作的这个学生对象

和通过数据库返回的学生对象

他们可能是内存当中的两个不同的对象

但是他们具有相同的学号

从概念上来讲

那么具有相同学号的对象应该是属于同一个对象

这里呢就需要在学生信息管理系统网中将统一学号

作为判断学生对象是否相等的一个重要依据

因此

如果要实现根据学号判的两个对象是否是同一对象不就需要覆盖

这里的equals方法

我们同样单击source菜单

选择这里的override/ implement methods方法

勾选这里的equals方法

单击OK

这样的话我们就会生成一个覆盖方法的框架

将它的内容修改成如下的内容 这里我们解释一下这些代码

首先我们先来判断

如果传入的要比较的对象和当前的对象this

是同一个对象的话

那么直接返回去true

如果要比较的对象是一个空对象没有

那么无需比较他一定是false

除了这两种情况之外也就是当前对象和要比较对象他们都存在

而且

不是同一个对象

那么这就需要进一步判断

这两个对象是不是同一个类型

这里的getClass方法它是继承自object的一个方法

这个方法的是返回类的元数据信息

也就是这个类有哪些属性有哪些方法

使用这个方法让我们可以判断这两对象的是不是属于同一个类

当传入object对象它属于Student类型时

我们可以将它进步的强制转换Student的类型

从而可以通过圆点访问法来获取他的id信息

这里的ID是一个String类型要进行两个ID是否相等判断

现在就归结为两个字符串的相等性判断

把我们的String类已经实现了相应的equals判断方法

所以这里只要将字符串的id相等行的轻判断工作

转交给我们String类的equals方法就可以了

这样当我们创建两个对象

只要他们学号相同

通过equals方法它的出来结果

这应该是相同的

我们来运行一下程序代码

看一下他的结果

最后需要额外提醒一下的是

当我们对对象的引用变量使用双等号进行相等判断时候

那么

他比较的只是两个引用变量的内存地址是否相等

而我们现在student的equals方法呢

已经覆盖成了

基于学号的值的判断

那么一个是对象的地址是否相等

一个人对象的值是否相等

他的区别的就在这里

好了今天内容 就讲到这里

你学会了吗

总结一下今天的课程

在今日课程当中我们了解了Java当中的继承关系

你需要掌握uml当中继承关系的绘制方法

了解继承当中父子关系别名

掌握进程关系当中的定义语法

还需要了解继承关系对不同的访问权限的影响

在此基础上

需要能够明白

使用equals方法实现相等性判断的主要依据

和他的原理

“做中学”Java程序设计课程列表:

第1章初始Java

-1.1Java简介

--01Java简介

-1.2搭建Java开发环境

--Video

-1.3使用记事本编写Java程序

--Video

-1.4使用Eclipse开发Java程序

--Video

-1.5导入/导出Java项目

--Video

-1.6管理组织代码

--Video

-第1章初始Java--测试题

第2章使用Java基本语法(1)

-2.1认识标识符

--Video

-2.2变量和变量类型

--Video

-2.3数据类型和类型转换

--Video

-2.4使用常量

--Video

-2.5使用注释

--Video

-2.6使用运算符进行算术运算

--Video

-第2章使用Java基本语法(1)--测试题

第2章使用Java基本语法(2)

-2.7使用运算符进行逻辑处理

--Video

-2.8使用if进行流程控制

--Video

-2.9使用switch进行流程控制

--使用switch进行流程控制

-2.10使用循环

--Video

-2.11循环的跳出和继续

--Video

-2.12多重循环

--Video

-第2章使用Java基本语法(2)--测试题

第3章使用面向对象基础语法

-3.1认识类和对象

--Video

-3.2为类添加属性

--Video

-3.3为类添加方法

--Video

-3.4为类添加静态方法

--Video

-3.5递归方法

--递归方法

-3.6构造方法

--Video

-3.7重载方法

--Video

-第3章使用面向对象基础语法--测试题

第4章使用面向对象高级语法

-4.1使用继承语法

--Video

-4.2使用数组

--Video

-4.3使用数组类操作数组

--Video

-4.4使用抽象类

--Video

-4.5使用接口

--Video

-第4章使用面向对象高级语法--测试题

第5章捕获并处理异常

-5.1异常处理机制

--Video

-5.2捕获异常

--Video

-5.3创建自定义异常

--Video

-第5章捕获并处理异常--测试题

第6章使用SWT设计界面

-6.1SWT图形界面

--Video

-6.2使用SWT布局管理-FillLayout

--使用SWT布局管理-FillLayout

-6.3使用SWT布局管理-RowLayout

--使用SWT布局管理-RowLayout

-6.4SWT中的事件模型

--Video

-6.5常见事件处理写法

--Video

-第6章使用SWT设计界面--测试题

第7章微波炉模拟程序

-7.1微波炉模拟程序的界面制作

--Video

-7.2微波炉模拟程序的代码重构

--Video

-7.3微波炉模拟程序的事件监听

--Video

-7.4微波炉模拟程序的数字键盘

--Video

-7.6微波炉模拟程序CookTimer

--Video

-7.7微波炉模拟程序添加图像

--Video

-7.8微波炉模拟程序添加声音

--Video

-7.9微波炉模拟程序安装包制作

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。