当前课程知识点:Java程序设计 > 第三章 类的重用 > 3.1.1-3.1.2-类继承的概念和语法 > 3.1.1-3.1.2-类继承的概念和语法
大家好欢迎回来继续学习
JAVA语言程序设计
这一节我们来学习
类继承的概念和语法
继承是一种
由已有类为基础去产生新类
去设计新类的这么一种机制
它是面向对象程序设计的
重要特征之一
用这种类继承的机制
我们可以根据已有类
来生成新的类
那么新类它就具有了
已有类的所有的属性和行为
在JAVA中只支持单继承
也就是说每一个子类
只能有一个直接超类
我们叫那个已有的
为基础的那个类叫做超类
也叫做(基类)
也叫做(副类)
在JAVA中更多的使用
超类这个术语
根据已有的类
产生出来的那个新类
在JAVA中我们称它为子类
在面向对象的概念中
我们也称它为派生类
在JAVA中更多的是用subclass
子类这个概念
那超类和子类
之间的关系是什么呢
在超类中规定了
所有子类都应该有的属性和行为
只要继承这个超类
那么它的所有属性和行为
就都继承过来了
继承过来以后
当然你可以去改造
也可以再扩展
所以在超类中
给出了所有子类
共同的属性行为
而子类 每一种子类
是这个超类的
更具体化的这样一个
更细化的这样一个类
或者说更下层的概念
继承机制可以提高
这个程序的抽象程度
可以提高代码的可重用性
那么通俗的来讲
子类对象与超类对象之间
存在着是一个 是一种
这样的关系
这个我们在后面例题中会看到的
子类对象从外部来看
它应该包括与超类相同的接口
比如说超类有多少
对外的公共接口 公共服务
那么子类都应该有
除此而外子类
还可以具有更多的方法
和更多的数据成员
也就是属性
也就是说我们在超类的基础之上
不仅继承 而且可以扩展
那么子类的对象
它存储的到底是什么呢
子类这个类里面
它包含了超类的
所有变量和方法
但是子类的对象里面
存的仅仅是从超类
继承过来的那些属性
还有自己本类扩展新增的属性
那么我们知道
类的方法它的方法代码
它只存一份代码的
它不会在每个对象中存的
每个对象里面它只存数据
接下来我们就来具体看一下
在JAVA语法中
怎么表达这个继承关系
我们来看一下继承的语法
我们看在类定义的时候
在类名之后
如果加一个extends关键字
在extends关键字后面
再加一个超类的类名
Super closs 超类的类名
那么这就构成了一个
类继承关系的声明
也就是说明了
我正在定义的这个类
它是继承自某个超类
是这样的一个含义
举个例子
比如说在某一个系统中
我们要管理三类人
一类就是最简单的
作为一个普通的人出现
比如说它既包括
你企业的员工 也包括客户
或者是其它的来访者等等的
只要登记过的
都在这个系统里面要表示
那因为它是很一般的
就是一个人的概念
那我们可以用一个Person
人这个类来表示它
比这个人这个概念
更具体一点的呢
还可以有企业员工的概念
企业里面所有员工
这样一个概念
那么它比泛泛的讲一个人
就更具体一些
那企业的员工又是有分工的
有不同的职别的
如果说它里面的某一种人
他的管理人员Manager
又是更具体的一种人了
是比泛泛的讲企业员工
更具体的一个人
所以我们就可以有
这样一个继承关系图来表示它
让这个Employee这个雇员类
继承Person人这个类
它比人是更具体的一个分类了
对吧
然后再让manager
管理人员类去继承雇员类
它是雇员中更具体的一种雇员
所以它们之间肯定存在着
是一个 是一种这种关系
比如说一个企业的雇员
他肯定是一种人
那么这个企业里面的管理人员
它肯定是一种雇员
存在这样的关系
我们就可以用
类的继承关系来设计它
现在我们来看
这个类继承关系
它的代码实现
在这里看到
我们看到定义为一个Person类
人员类
这里面就是有一个属性是姓名
然后有一个方法是name
获得这个姓名
它是一个很一般的
就是普通的人的类
那接下来这个Employee
这个雇员类
它就是更具体的一种人
它是一种人
但是它是更专门的一种人
这样说吧
所以我们定义这个
Employee雇员类
它就继承了extends Person
继承了Person这个类
这个时候Person类里面的
name姓名
和name这个获取姓名的
这个方法肯定也都继承过来了
除此而外
它还定义了自己的
employee Number
员工编号
和getmployee Number
就是获取员工编号
这样一个属性和一个方法
然后再看Manager
它是一种更具体的
更专门的员工
所以它又去继承
这个Employee类
然后它又声明了自己的
responsibilities
它的职责这个属性
还有getResponsibilities
这个获取它的职责
这样一个方法
更具体的属性和方法
所以我们看到
最一般的类是Person
在Person的基础上扩展
形成了Employee类
或者说Employee继承了Person
然后Manager
又继承了Employee
Manager里面就具有了
从直接和间接的
超类继承过来的所有东西
它有了name
有了employee Number
它有了name方法
有了employee Number方法
此外自己还又声明了
responsibilities
还有getResponsibilities
这些自己新增的
好 接下来我们来测试一下
这里构造了一个Employee对象
然后给它的一些属性附值
然后调用它的name方法
这个name方法
是它从它的超类继承来的
而getEmployeeNumber方法
是它自己定义的方法
再接下来再构造一个
Manager对象
也是给它的一些属性设置值
那么这些属性里的name
是从它的超类的超类继承来的
Employee
是从它直接超类继承来的
(英文)是它自己
自己声明的
那同样的方法也是
这里的方法调用它的
包括了从间接的超类继承的
从直接的超类继承的
还有自己声明的
所以我们通过这个例子
简单的体会到了类的继承
接下来我们再看一个例子
这个例子我们要体会一下
从超类继承的成员
有一些是不能直接访问的
那我们来看这个例子
在这个class B类里边
它声明的有public属性
有protected属性
还有private属性
它的方法是一个getB
是一个公有接口
可以对外提供服务的
public方法
好 那类A继承了类B
我们来看在类A中
我们尝试直接访问变量A
是可以的
因为它是超类中的公有的变量
继承过来还是公有的可以访问
但是我们尝试访问这个变量B
就不允许了
编译就要出错 为什么呢
因为B是私有的
也就是说私有的属性
私有的变量
继承到了子类中以后
是不能直接访问的
那你特别需要访问它怎么办呢
就看你的超类中
对于这个变量
有没有设置访问接口
这里有B
就是获取私有数据成员B的
值的这么一个方法
所以我们可以调用getB
通过公有接口去访问
它的私有成员
那么C这个属性是println
那么在它的子类中
是可以直接访问的
这一节我们学习了
类继承的概念和语法
并且通过简单的例题观察了
如何从一个已有的类
去派生出新的类
好这一节的内容就是这样
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件