第七章继承和多态优秀课件
合集下载
《继承与多态》课件
代码,提高开发效率。
游戏关卡设计
继承可以用于关卡设计,通过创 建关卡基类,派生出不同难度和 风格的子类,实现快速构建多种
关卡。
游戏AI设计
在游戏AI中,继承可以用于创建 具有不同行为和策略的敌人角色
,使得游戏更加丰富和有趣。
多态在GUI编程中的应用
事件处理
01
在GUI编程中,多态可以用于实现不同控件的事件处理函数,使
《继承与多态》ppt课件
• 继承的概念 • 多态的概念 • 继承的实现方式 • 多态的实现方式 • 继承与多态的应用场景 • 继承与多态的案例分析
01
继承的概念
什么是继承
继承是一种面向对象编程的重要概念,它允许一个类继承另 一个类的属性和方法。通过继承,子类可以继承父类的所有 属性和方法,并且可以扩展或覆盖它们。
得相同的函数可以处理不同控件的事件。
界面布局
02
通过多态,可以动态地改变控件的外观和行为,实现更加灵活
的界面布局。
自定义控件
03
多态可以用于创建自定义控件,使得控件具有更加丰富的属性
和行为。
继承与多态在软件工程中的应用
模块化设计
通过继承和多态,可以将软件系统划分为多个模块,每个 模块具有明确的职责和接口,提高软件的可维护性和可扩 展性。
在层次结构中,每个 类只能有一个父类, 但可以有多个子类。
04
多态的实现方式
方法的重载
方法的重载是指在同一个类中 ,方法名相同但参数列表(参 数类型、数量、顺序)不同的 方法。
重载方法允许我们使用相同的 方法名来定义多个方法,增强 了代码的可读性和可维护性。
重载方法可以根据不同的参数 列表进行区分,编译器会根据 实际传入的参数类型和数量自 动匹配相应的方法。
游戏关卡设计
继承可以用于关卡设计,通过创 建关卡基类,派生出不同难度和 风格的子类,实现快速构建多种
关卡。
游戏AI设计
在游戏AI中,继承可以用于创建 具有不同行为和策略的敌人角色
,使得游戏更加丰富和有趣。
多态在GUI编程中的应用
事件处理
01
在GUI编程中,多态可以用于实现不同控件的事件处理函数,使
《继承与多态》ppt课件
• 继承的概念 • 多态的概念 • 继承的实现方式 • 多态的实现方式 • 继承与多态的应用场景 • 继承与多态的案例分析
01
继承的概念
什么是继承
继承是一种面向对象编程的重要概念,它允许一个类继承另 一个类的属性和方法。通过继承,子类可以继承父类的所有 属性和方法,并且可以扩展或覆盖它们。
得相同的函数可以处理不同控件的事件。
界面布局
02
通过多态,可以动态地改变控件的外观和行为,实现更加灵活
的界面布局。
自定义控件
03
多态可以用于创建自定义控件,使得控件具有更加丰富的属性
和行为。
继承与多态在软件工程中的应用
模块化设计
通过继承和多态,可以将软件系统划分为多个模块,每个 模块具有明确的职责和接口,提高软件的可维护性和可扩 展性。
在层次结构中,每个 类只能有一个父类, 但可以有多个子类。
04
多态的实现方式
方法的重载
方法的重载是指在同一个类中 ,方法名相同但参数列表(参 数类型、数量、顺序)不同的 方法。
重载方法允许我们使用相同的 方法名来定义多个方法,增强 了代码的可读性和可维护性。
重载方法可以根据不同的参数 列表进行区分,编译器会根据 实际传入的参数类型和数量自 动匹配相应的方法。
第7章-单继承与多态PPT幻灯片
AlarmClock类中的成员函数ShowTime()覆盖了基类Clock中的
同名成员函数ShowTime()。
9
7.1.2 派生类实现
(3) 添加新成员 派生类在继承基类成员的基础之上,根据派生类的
实际需要,增加一些新的数据成员和函数成员,以描 述某些新的属性和行为。如:AlarmClock添加了数 据成员AH、AM、OpenAlarm, 成员函数SetAlarm()、 SwitchAlarm()。
类以另一个类对象做数据成员,成为组合。组合描述的 是整体与部分的关系,类与类之间体现的是“is a part of”, 即如果在逻辑上A是B的一部分(is a part of),则允许A和其 他数据成员组合为B。例如:发动机、车轮、电池、车门、方 向盘、底盘都是小汽车的一部分,它们组合成汽车。而不能 说发动机是汽车的一种。
7 class Circle :public Point
8{
9 private:
10
double radius; //半径
11 public:
12
Circle(double R, int X, int Y):Point(X,Y)
13
{
14
radius=R;
15
}
类名
16
double area() //求面积
什么时候使用继承,什么时候使用组合,要根据 问题类与类之间的具体关系,顺其自然,权衡考虑。
例:p354
13
7. 1.4继承的方式p389
7.1.4 公有继承
公有方式继承的特点: ① 基类的公有成员在派生类中仍然为公有成员,可以由派
生类对象和派生类成员函数直接访问。 ② 基类的私有成员在派生类中,无论是派生类的成员还是派
chap7_继承与多态
class 派生类名:继承方式 基类名1,继承方式 基类名2… { 派生类新增成员声明; }
说 明
符号“ 表示继承 表示继承。 符号“ :”表示继承。 继承方式规定了派生类的继承方式, 继承方式规定了派生类的继承方式,指定了派生类从 基类继承来的成员的访问权限。 基类继承来的成员的访问权限。
public:公有继承 : protected:保护继承 : private:私有继承,默认为私有继承。 :私有继承,默认为私有继承。
2 基类和派生类
基类与派生类
若一个类C2从另一个类C1扩展而来,则称C2为派生类 (derived class),C1为基类(base class)。 基类也称为父类(parent class), 派生类也称为扩展类 (extended class)或子类(child class)。 一个派生类继承了其基类的所有数据成员和成员函数 (除构造函数和析构函数外),还可以增加新的数据 成员和函数,从而使派生类更具特殊化。 用指向基类的箭头 指向基类的箭头表示两个类之间的继承关系。 指向基类的箭头
#ifndef GEOMETRICOBJECT_H #define GEOMETRICOBJECT_H class GeometricObject 程序清单: 程序清单: { GeometricObject 类的声明: 类的声明: public: GeometricObject.h GeometricObject(); GeometricObject(char*, bool); char*getColor(); void setColor(char*); bool isFilled(); void setFilled(bool filled); void disp(); private: char color[20]; bool filled; }; #endif
说 明
符号“ 表示继承 表示继承。 符号“ :”表示继承。 继承方式规定了派生类的继承方式, 继承方式规定了派生类的继承方式,指定了派生类从 基类继承来的成员的访问权限。 基类继承来的成员的访问权限。
public:公有继承 : protected:保护继承 : private:私有继承,默认为私有继承。 :私有继承,默认为私有继承。
2 基类和派生类
基类与派生类
若一个类C2从另一个类C1扩展而来,则称C2为派生类 (derived class),C1为基类(base class)。 基类也称为父类(parent class), 派生类也称为扩展类 (extended class)或子类(child class)。 一个派生类继承了其基类的所有数据成员和成员函数 (除构造函数和析构函数外),还可以增加新的数据 成员和函数,从而使派生类更具特殊化。 用指向基类的箭头 指向基类的箭头表示两个类之间的继承关系。 指向基类的箭头
#ifndef GEOMETRICOBJECT_H #define GEOMETRICOBJECT_H class GeometricObject 程序清单: 程序清单: { GeometricObject 类的声明: 类的声明: public: GeometricObject.h GeometricObject(); GeometricObject(char*, bool); char*getColor(); void setColor(char*); bool isFilled(); void setFilled(bool filled); void disp(); private: char color[20]; bool filled; }; #endif
继承与多态.ppt
计算机与信息技术学院
Java语言 程序设计
Java工程师系列
4.1 继承的概念
继承(inheritance)是面向对象的程序设计中最为重要的特征之 一。
在Java语言中,可以从已有的类派生出新类,这叫继承 (inheritance)。
由继承而得到的类为子类(subclass),被继承的类为父类或 超类(superclass)。
计算机与信息技术学院
Java语言 程序设计
4.6 多态(思想)
Java工程师系列
多态为什么是面向对象程序的重要特性?
利用多态,编制求圆和矩形面积的类,并编制测试类。 TestRC.java
逻辑多态思想示例分析
假设生产小汽车有四个步骤:钢板切割、压模、组装、喷漆。但是生产每 种小汽车具体步骤内容又有所不同。若有100种小汽车,则计算机仿真的生 产过程描述如下。
3.域的添加
子类可以新加一些方法。
计算机与信息技术学院
Java语言 程序设计
4.4 继承中方法重载与重写
实例: ProjectManager.java
Java工程师系列
计算机与信息技术学院
Java语言 程序设计
Java工程师系列
4.4 继承中方法重载与重写
方法重载是指一个类中的多个方法具有相同的名字,但这些方法的参数必 须不同,即或者是参数的个数不同,或者是参数的类型不同。父类有自己 的重载方法,子类也可以有自己的重载方法。
一个类只能有一个直接父类。
计算机与信息技术学院
Java语言 程序设计
Java工程师系列
4.1 继承的概念
子类继承父类的状态和行为,同时也可以修改父类的状态或重载父类的行 为,并添加新的状态和行为。
Java语言 程序设计
Java工程师系列
4.1 继承的概念
继承(inheritance)是面向对象的程序设计中最为重要的特征之 一。
在Java语言中,可以从已有的类派生出新类,这叫继承 (inheritance)。
由继承而得到的类为子类(subclass),被继承的类为父类或 超类(superclass)。
计算机与信息技术学院
Java语言 程序设计
4.6 多态(思想)
Java工程师系列
多态为什么是面向对象程序的重要特性?
利用多态,编制求圆和矩形面积的类,并编制测试类。 TestRC.java
逻辑多态思想示例分析
假设生产小汽车有四个步骤:钢板切割、压模、组装、喷漆。但是生产每 种小汽车具体步骤内容又有所不同。若有100种小汽车,则计算机仿真的生 产过程描述如下。
3.域的添加
子类可以新加一些方法。
计算机与信息技术学院
Java语言 程序设计
4.4 继承中方法重载与重写
实例: ProjectManager.java
Java工程师系列
计算机与信息技术学院
Java语言 程序设计
Java工程师系列
4.4 继承中方法重载与重写
方法重载是指一个类中的多个方法具有相同的名字,但这些方法的参数必 须不同,即或者是参数的个数不同,或者是参数的类型不同。父类有自己 的重载方法,子类也可以有自己的重载方法。
一个类只能有一个直接父类。
计算机与信息技术学院
Java语言 程序设计
Java工程师系列
4.1 继承的概念
子类继承父类的状态和行为,同时也可以修改父类的状态或重载父类的行 为,并添加新的状态和行为。
Java课件第七讲继承与多态.ppt
public static void main(String args[]){ UniversityWorld univers=new UniversityWorld("同济大学 ","上海","中国"); System.out.println("大学:"+name+" 城市:"+city+" 国 籍:"+country); } }
例:SuperTest.java
(二)方法重载
在Java中,可以在同一个类中定义多个同 名的方法;在方法重载时,根据方法参 数的个数、类型、顺序来决定采用哪个 方法。 • 例: void f() {…} void f(long number) {…} • 例:UniversityWorldCity.java
(二)接口的定义
• 声明格式:
[接口修饰符] interface 接口名 [extends 父接口名] { …//方法的原型定义或静态常数 } 注意:与抽象类一样,接口不需要构造函数;接口 的继承与类一样,但接口的父类也必须是接口。
例: interface Booksale { void show(); void sale(); void replay(); }
例:
class Game { public void Play() { System.out.println("Play a game."); } } class BoardGame extends Game { public void Play() { System.out.println("Play a board game."); } } public class Chess extends BoardGame { public void Play() { System.out.println("Play a chessversityWorld2.java
JAVA-继承与多态PPT学习课件
5
2020年2月16日星期日
Java程序设计 EmployeeClass类与ManagerClass类的关系图
6
2020年2月16日星期日
Java程序设计
// file name:EmployeeClass.java
public class EmployeeClass {
// 雇员类
private String name;
9
2020年2月16日星期日
Java程序设计 ShapeClass类、RectangleClass类与 SquareClass类之间的关系类图
ShapeClass类是几何图元的通用类;矩形是一种特定的几何图元,因此, RectangleClass类应该是ShapeClass的子类;正方形是一种特殊的矩形, 所以SquareClass类是RectangleClass类的子类。
public double getSpecial() { ... }
public String toString() { ... }
}
8
2020年2月16日星期日
Java程序设计
举例:设计与几何图元有关的类。
问题分析:几何图元是指可以绘制的基本几何图形,例如矩形、正 方形、圆形、多边形等。鉴于篇幅的考虑,这里只考虑矩形与正方 形。 假设任何几何图元都有颜色与位置两个属性,因此应该将这些共有 特性定义在一个类中,它是顶层类;而矩形还应该有长、宽两个属 性,由于矩形是一种几何图元,所以它自然应该拥有几何图元的共 有特性,因此可以将矩形类设计为几何图元类的子类;因为正方形 是一种特殊的矩形,它的特殊性在于长与宽相等,所以应该将正方 形类设计为矩形的子类。
// 颜色属性
private Point place; // 位置属性
第七章面向对象的Java实现继承和多态精品PPT课件
4
• 掌握继承 • 掌握super关键字 • 掌握多态
本章目标
5
生活中的继承 2-1
• 生活中,继承的例子随处可见
动物
谁是父类? 谁是子类? 能说出继承的特点吗?
食草动物
食肉动物
继承需要符合的关系:is-a,父类更通用、子类更具体
6
生活中的继承 2-2
• 子类具有父类的一般特性(包括属性和行为), 以及自身特殊的特性
}
}
}
9
代码存在重复,违背了}“write once, only once”的原则
为什么需要继承 4-3
• 如何改进?有没有可能建立继承关系,让子类自动继承父 类的属性和方法?
Java教员是教员吗? .NET教员是教员吗?
教员
姓名 所在中心
授课 自我介绍
Java教员 .NET教员
10
public class Teacher {
} 使用继承,可以有效实现代码复用
11
如何实现继承 3-1
• 在Java语言中,用extends关键字来表示一个类 继承了另一个类,例如:
public class JavaTeacher2 extends Teacher { //其余代码省略
}
• 在父类中只定义一些通用的属性与方法,例如:
public class Teacher { private String name; // 教员姓名 private String school; // 所在中心 public Teacher(String myName, String mySchool) { //初始化属性值 } public void giveLesson() { //授课方法的具体实现 } public void introduction() { //自我介绍方法的具体实现 }
• 掌握继承 • 掌握super关键字 • 掌握多态
本章目标
5
生活中的继承 2-1
• 生活中,继承的例子随处可见
动物
谁是父类? 谁是子类? 能说出继承的特点吗?
食草动物
食肉动物
继承需要符合的关系:is-a,父类更通用、子类更具体
6
生活中的继承 2-2
• 子类具有父类的一般特性(包括属性和行为), 以及自身特殊的特性
}
}
}
9
代码存在重复,违背了}“write once, only once”的原则
为什么需要继承 4-3
• 如何改进?有没有可能建立继承关系,让子类自动继承父 类的属性和方法?
Java教员是教员吗? .NET教员是教员吗?
教员
姓名 所在中心
授课 自我介绍
Java教员 .NET教员
10
public class Teacher {
} 使用继承,可以有效实现代码复用
11
如何实现继承 3-1
• 在Java语言中,用extends关键字来表示一个类 继承了另一个类,例如:
public class JavaTeacher2 extends Teacher { //其余代码省略
}
• 在父类中只定义一些通用的属性与方法,例如:
public class Teacher { private String name; // 教员姓名 private String school; // 所在中心 public Teacher(String myName, String mySchool) { //初始化属性值 } public void giveLesson() { //授课方法的具体实现 } public void introduction() { //自我介绍方法的具体实现 }
继承与多态课件ppt
按他们在类定义中出现的先后顺序:先定义者先 构造。
• 类的对象成员与类的一般数据成员的构造顺序?
先构造类的对象成员,再构造一般数据成员(执 行类自身的构造函数体)。
• 构造顺序与析构顺序的关系?
二者顺序相反:先构造者,后析构。
继承
多继承:一个类从多个基类派生,这样的继
承结构称为多继承
Father
int leg; int body; Public: …… };
Class teacher:public human { string name; h1 Public: …… };
• 派生类对象的空间占用≥基类对象的空间占用
继承
类内的访问控制:派生类是否能访问所有基类 成员?
对于基类的私有成员,派生类不能直接访问 protected的作用:只能让子类访问而不能让
• 练习2:设计一个虚基类base,包含姓名和 年龄私有数据成员以及相关的成员函数, 由它派生出领导类leader,包含职务和部门 私有数据成员以及相关的成员函数。再由 base派 生出工程师类engineer,包含职称 和专业私有数据成员以及相关的成员函数。 然后由leader和engineer类派生出主任工程 师类chairman。采用一些数据进行测试。
派生类(子类)
human teacher
通常有关系:子类 is a 父类
继承
Inheritance
继承
继承
Student
Employee
GradStudent
Manager
Fig.1 单重继承
Vehicle
Father
Mather
Car Coupe Fig.2 多层继承
Child
Fig.3 多重继承
• 类的对象成员与类的一般数据成员的构造顺序?
先构造类的对象成员,再构造一般数据成员(执 行类自身的构造函数体)。
• 构造顺序与析构顺序的关系?
二者顺序相反:先构造者,后析构。
继承
多继承:一个类从多个基类派生,这样的继
承结构称为多继承
Father
int leg; int body; Public: …… };
Class teacher:public human { string name; h1 Public: …… };
• 派生类对象的空间占用≥基类对象的空间占用
继承
类内的访问控制:派生类是否能访问所有基类 成员?
对于基类的私有成员,派生类不能直接访问 protected的作用:只能让子类访问而不能让
• 练习2:设计一个虚基类base,包含姓名和 年龄私有数据成员以及相关的成员函数, 由它派生出领导类leader,包含职务和部门 私有数据成员以及相关的成员函数。再由 base派 生出工程师类engineer,包含职称 和专业私有数据成员以及相关的成员函数。 然后由leader和engineer类派生出主任工程 师类chairman。采用一些数据进行测试。
派生类(子类)
human teacher
通常有关系:子类 is a 父类
继承
Inheritance
继承
继承
Student
Employee
GradStudent
Manager
Fig.1 单重继承
Vehicle
Father
Mather
Car Coupe Fig.2 多层继承
Child
Fig.3 多重继承
《继承和多态》PPT课件
public class InheritDemo3 extends SuperClass{
float a =4f; public void print(){
int a =5; super.print(); System.out.println("InheritDemo2" System.out.println(a); System.out.println(this.a); System.out.println(super.a); } public static void main(String args[]){ InheritDemo3 id3 = new InheritDemo3(); id3.print(); } }
精选PPT
6
多态的概念
多态是指在一棵继承树中的类可以有多个同名但不同方法体 以及不同形参的方法。
两种情况:
➢ 覆盖:在子类中直接定义和父类同样的属性和方法,但重 新编写了方法体,即子类与父类方法的星参与返回值都相 同,而内部处理不同,这种方法在使用过程中,Java虚拟 机会根据调用这个方法的类来确定哪个方法被调用
return super.a;
Father x=new Father();
}}
Son y=new Son();
System.out.println("a of son is :" +y.a);
System.out.println("a of son's super is :" +y.getA());
Cleanser.main(arg); }
}
精选PPT
13
• 特殊引用:this和super
第七讲 继承与多态
Vehicle作为基类,体现了“汽车”这 个实体具有的公共性质:汽车都有轮 子和重量。 Car类继承了Vehicle的这些性质,并且 添加了自身的特性:可以搭载乘客。
• C#中的继承符合下列规则:
– 继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅 继承了B中声明的成员,同样也继承了A中的成员。 – 派生类应当是对基类的扩展。派生类可以添加新的成员,但不能 除去已经继承的成员的定义。 – 构造函数和析构函数不能被继承。除此以外的其他成员,不论对 它们定义了怎样的访问方式,都能被继承。基类中成员的访问方 式只能决定派生类能否访问他们。 – 派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖 已继承的成员。但这并不因为这派生类删除了这些成员,只是不 能再访问这些成员。 – 类可以定义虚方法、属性以及虚索引,它的派生类能够重载这些 成员,从而实现类可以展示出多态性。 – 派生类只能从一个类中继承,可以通过接口实现多重继承。
• base还有一种使用方式类似于this,只是它总是引 用使用它的类的基类。基本形式:
– base.member – 其中member可以是方法或实例变量。
using System; class A { public int i = 0; public void Show() { Console.WriteLine("i in base class:" + i); } }
x2所引用的是引用变量的类型而不是对象的 类型(此类型决定能够访问的成员)。即一 个派生类对象的引用赋值给基类引用变量时, 只能访问对象中由基类定义的那部分。这是 x2在引用Y对象时不能访问b的原因。因为基 类不知道派生类添加了什么。 (这点在后面介绍虚方法时有详细应用)
《继承与多态》课件
可读性和复用性,减少代码冗余。
总结
4
继承和多态是面向对象编程中重要的 思想和方法,对于软件开发具有重要
意义。
多态可以通过方法重写和方法重载来实现, 使不同的对象可以对同一方法表现出不同 的行为。
3 多态的好处
4 多态的注意事项
多态提高了代码的灵活性和可扩展性,使 代码更易于维护和扩展。
在使用多态时,需要注意方法的参数类型 和返回值类型,以避免类型错误导致的运 行时错误。
三、继承与多态的实例
实例介绍
通过一个学校的班级管理系统实例,演示继承和 多态的实际应用。
《继承与多态》PPT课件
本课程介绍继承与多态的概念和应用。通过丰富的实例和实践演示,帮助学 生深入理解这些重要的面向对象编程概念。
一、继承
什么是继承
继承是面向对象编程中的重要概念,允许子 类继承父类的属性和方法。
继承的实现方式
继承可以通过使用关键字extends将子类与父 类联系起来,形成继承关系。
实例演示
展示如何通过继承和多态处理学生和老师的不同 操作,并实现班级管理的各项功能。
四、总结
1
继承与多态的异同
继承和多态都是面向对象编程的核心
适用场景
2
概念,但它们的实现方式和应用场景 有所不同。
继承适用于父子类之间的继承关系,
而多态适用于处理不同对象的同一操
作。
3
使用技巧
合理应用继承和多态可以提高代码的
继承的好处
通过继承,子类可以重用父类的代码,提高 开发效率,并实现代码的复用。
继承的注意事项
在继承中,需要注意继承层级、构造函数的 调用以及方法重写等问题,以确保正确的继 承操作。
二、多态
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将重复代码 抽取到父类 中
使用继承优化设计
w 使用继承优化后:
方便修改 代码
继承的好处
减少代码量
子类与父类是is-a关系
如何使用继承
❖ 使用继承
▪ 编写父类
class Pet { //公共的属性和方法
}
▪ 编写子类,继承父类
class Dog extends Pet { //子类特有的属性和方法
小结
❖ 阅读代码,说出运行结果
class Car {
载客量是4人
private int site = 4; //座位数
载客量是20人
Car(){
System.out.println ("载客量是"+site+"人);
} public void setSite(int site){
this.site = site; } void print(){
❖ static修饰符修饰的方法叫静态方法 ❖ 目的:使该方法独立于类的实例,使用类去访
问,而不是类实例,所以也叫类方法
规则
可以调用其他静态方法
必须访问静态数据
不能使用 super 或 this 关键字
final修饰符
final
不能修改变量
类不能被继承
子类不能重写方法
final用法
Penguin类不希望再被其他类继承?
Penguin
- name:String - health:int - love:int - sex:String
+ print():void + getName():String + getHealth ():int + getLove():int + getSex():String + Penguin()
注: 没有extends,默认父类为Object,是最高层类。 只能有一个父类,即单继承
❖ 子类访问父类成员
使用super关键字 ▪ 访问父类属性
super代表 ; 父类对象
▪ 访问父类方法
super.print();
理解继承
理解继承
❖ 子类继承了父类的属性和方法 ❖ 但有些父类成员不能继承:
this关键字调用自己的其他构造方法,那么在产生子类实例对象时 JVM自动调用父类无参数的构造方法。
何时使用继承
何时使用继承?
继承与真实世界类似
只要说“猫是哺乳动物”,猫的很多属性、行为 就不言自明了
藏獒是一种狗
符合is-a关系的设计使用继承
继承是代码重用的一种方式
将子类都有的属性和行为放到父类中
Dog
- name:String - health:int - love:int - strain:String
+ print():void + getName():String + getHealth ():int + getLove():int + getStrain:String + Dog()
使用final类
public final class Penguin extends Pet {
//… }
最终版的类
方法不希望被重写?
使用final方法 public final void print () {
//…
}
最终版的方法
属性值不希望被修改?
使用final方法
public class Penguin {
}
只能继承一个父类
class Penguin extends Pet {
}
Hale Waihona Puke 继承关键字继承的实现
❖ extends关键字用于继承类。 ❖ 声明一个继承父类的类的通常形式如下:
class subclass-name extends superclass-name { //类体
} 例:class Student extends Person { … }
bus.print();
}
方法重写
❖ 子类中有和父类相同签名的方法,会如何?
子类重写父类方法
方法重写
❖ 子类可以定义与父类同名的变量,实现对父类变量 的隐藏
❖ 子类可以定义与父类同名的方法,实现对父类方法 的覆盖,即方法重写
❖ 方法重写的条件:
▪ 必须具有相同的方法名; ▪ 必须具有相同的参数列表; ▪ 重写方法的返回值类型必须和被重写方法的返回值类型相同或者是
▪ abstract type method_name(parameter_list); ❖ 声明抽象类语法:
第七章继承和多态
❖ 构造方法 ❖ 方法重载 ❖ 封装与访问权限控制
内容回顾
❖ 继承与方法重写 ❖ 多态 ❖ 抽象类与抽象方法 ❖ instanceof运算符与类型转换
本讲内容
❖ 掌握继承的概念及用法。 ❖ 掌握多态的概念及用法 ❖ 掌握抽象类的使用
本讲目标
为什么使用继承?
❖ 这两个类图有什么问题?
其子类; ▪ 重写方法的不能缩小被重写方法的访问权限。
方法重写
❖ 构造方法能被重写吗?
不能被继承因此不能重写
❖ 如何在子类中调用父类的构造方法?
可以被默 认添加
super(); super(参数表);
只能是构造方法 的第一条语句
方法修饰符
方法修饰符
static
final
abstract
static修饰符
System.out.print("载客量是"+site+"人");
class Bus extends Car { Bus(int site){ setSite(site); }
}
}
}
public static void main(String[] args) {
Bus bus = new Bus(20);
▪ private成员 ▪ 子类与父类不在同包,使用默认访问权限的成员 ▪ 构造方法
继承的特点
❖ 通过继承可以简化类的定义,实现代码的重用 ❖ Java只支持单继承,不允许多重继承。 ❖ 可以有多层继承;类B继承类A;类C继承类B; ❖ 子类继承父类的成员变量和成员方法,但不继承父类的构造方法 ❖ 在子类的构造方法中可用super(参数列表)调用父类的构造方法。 ❖ 如果子类的构造方法中没有显式的调用父类构造方法,也没有使用
final String home ="南极";// 居住地
public void setHome(String name){
this.home=home; //错误,home不可以再次赋值
}
}
最终版的属性值
abstract修饰符
❖ 由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类 ❖ 抽象方法必须声明在抽象类中 ❖ 抽象方法语法: