类、继承与多态方案.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《类、继承与多态方案.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 方案
- 资源描述:
-
1、Java程序程序设计设计与开与开发发2022-12-8 在面向对象程序设计中,继承是最为显著的一个特征。继承在面向对象程序设计中,继承是最为显著的一个特征。继承机制模仿了现实中机制模仿了现实中IS-A关系关系(层次关系层次关系).继承就是以原有某个类继承就是以原有某个类为基础生成新的类,增加一些为基础生成新的类,增加一些新的成员变量和方法新的成员变量和方法,使新的类,使新的类功能更趋完善的一种高效编程机制。新生成的类被称为功能更趋完善的一种高效编程机制。新生成的类被称为子类子类(或或派生类派生类),原有的这个类被称为子类的,原有的这个类被称为子类的父类父类(基类,也称为超类基类,也称为超类).
2、v通常把某一组相似对象的基础的、共有的、通用的属性设计通常把某一组相似对象的基础的、共有的、通用的属性设计成父类,再通过继承生成新的子类,代码重用性得到了提高成父类,再通过继承生成新的子类,代码重用性得到了提高.例如例如,水果和梨水果和梨,动物和乌龟动物和乌龟,食品和罐头食品和罐头,交通工具和轿车等交通工具和轿车等 注意,注意,Java顶层父类是顶层父类是Object.3.2 继承继承Java程序程序设计设计与开与开发发2022-12-8类的定义语法是:类的定义语法是:修饰符修饰符 class class 类名类名 extends extends 父类父类 implements impleme
3、nts 接口名接口名 类成员变量定义类成员变量定义 类方法定义类方法定义 类的类的修饰符修饰符用来说明类的特殊用来说明类的特殊性质。分为三种:性质。分为三种:访问控制符:访问控制符:public 或或 无无抽象类说明符:抽象类说明符:abstract最终类说明符:最终类说明符:final接口名接口名跟在跟在implements关键关键字后面,用来说明当前类中实字后面,用来说明当前类中实现了哪个接口定义的功能和方现了哪个接口定义的功能和方法。法。接口是接口是Java语言用来实语言用来实现多重继承的一种特殊机制。现多重继承的一种特殊机制。3.2.1 类的定义类的定义 Java程序程序设计设计与开与
4、开发发2022-12-8v如定义一个如定义一个Person类和子类类和子类Studentclass Person String name;int age;public void eat()public void sleep()class Student extends Person private String shoolNO;private void doHomework();Java程序程序设计设计与开与开发发2022-12-83.2.2 成员变量和方法成员变量和方法 成员变量用来描述类创建的对象的属性,而成员方法则刻画成员变量用来描述类创建的对象的属性,而成员方法则刻画了对象特有的行为。
5、了对象特有的行为。Java中的成员变量根据不同的修饰符有中的成员变量根据不同的修饰符有3种类型:种类型:-实例变量实例变量,随对象被访问,随对象被访问-类变量类变量,随类被访问,随类被访问 -常量常量注意,注意,Java成员变量随对象被创建而产生,对于全局静态变成员变量随对象被创建而产生,对于全局静态变量,则与类属于同等层次概念。量,则与类属于同等层次概念。Java程序程序设计设计与开与开发发2022-12-8v举例说明,见举例说明,见【例例3.3】Java程序程序设计设计与开与开发发2022-12-8v就对象的方法而言,可分为构造方法和普通方法。而构造方就对象的方法而言,可分为构造方法和普通
6、方法。而构造方法是在类创建对象时由系统自动调用。法是在类创建对象时由系统自动调用。与成员变量一样,方法也有实例方法和类方法之分。与成员变量一样,方法也有实例方法和类方法之分。-实例方法实例方法,随对象而调用,随对象而调用-类方法类方法,随类而调用,随类而调用方法的定义语法是:方法的定义语法是:修饰符修饰符 返回值返回值 (参数列表参数列表)方法体方法体 其中,修饰符共其中,修饰符共4种情况:种情况:public,protected,private 或或 不提供不提供.Java程序程序设计设计与开与开发发2022-12-8v要使用对象,必须先创建对象。要使用对象,必须先创建对象。Java中的对象
7、是通过构造中的对象是通过构造方法来创建的。构造方法有以下特性:方法来创建的。构造方法有以下特性:构造方法的方法名构造方法的方法名与类名相同与类名相同。构造方法构造方法没有返回值没有返回值,当然也没有返回类型。,当然也没有返回类型。构造方法的主要作用是完成构造方法的主要作用是完成对类对象的初始化工作对类对象的初始化工作。构造方法构造方法一般不能一般不能由编程人员显式地直接调用。由编程人员显式地直接调用。在创建一个类的新对象的同时,系统会在创建一个类的新对象的同时,系统会自动调用该类的构造自动调用该类的构造方法方法,为新对象初始化。,为新对象初始化。一个类可以有一个类可以有多个构造方法,多个构造方
8、法,可以可以有有0个、个、1个或多个参数个或多个参数。构造方法总是构造方法总是和和new运算符一起被调用运算符一起被调用。3.2.3 对象的构造和初始化过程对象的构造和初始化过程*!*Java程序程序设计设计与开与开发发2022-12-8v当没有为类提供一个构造方法时,则编译器会自动加入一个当没有为类提供一个构造方法时,则编译器会自动加入一个不带参数的构造方法,称为默认构造方法。例如,不带参数的构造方法,称为默认构造方法。例如,class Person Person()super();class Student extends Person Student()super();/系统自动行为系统
9、自动行为 public static void main(String args)new Student();/(1)创建子类对象创建子类对象 问题,上述语句问题,上述语句(1)会不会创建父类对象会不会创建父类对象?要注意区分要注意区分构造方法构造方法和和new操作操作的不同作用的不同作用!class Object Object()Java程序程序设计设计与开与开发发2022-12-8 v构造方法的执行过程构造方法的执行过程 当创建一个对象时,对象的各个变量根据其类型被设置为当创建一个对象时,对象的各个变量根据其类型被设置为相应的相应的默认初始值默认初始值,然后调用构造方法然后调用构造方法。下
10、面是执行步骤。下面是执行步骤:调用父类的构造方法,这个过程会重复下去调用父类的构造方法,这个过程会重复下去.按声明顺序对成员变量进行初始化按声明顺序对成员变量进行初始化.执行构造方法中的各语句执行构造方法中的各语句.v构造器调用的顺序保证构造器调用的顺序保证所有的父类构造方法所有的父类构造方法都得到调用,保都得到调用,保证证其基类的成员得到正确的初始化其基类的成员得到正确的初始化并执行相关语句,然后对并执行相关语句,然后对本对象的域本对象的域(变量变量)进行初始化。构造方法的作用就是初始化进行初始化。构造方法的作用就是初始化.下面举例说明下面举例说明.【例例3.1】构造方法和对象初始化构造方法
11、和对象初始化Java程序程序设计设计与开与开发发2022-12-8程序运行结果是:?程序运行结果是:?下面,将对继承情况下父下面,将对继承情况下父-子类之间的初始化进行分析子类之间的初始化进行分析.Java程序程序设计设计与开与开发发2022-12-8public class aparent int height=170;int weight;aparent()height=160;weight=130;class aboy extends aparent protected int comhei=120;aboy()weight=(int)(120f/height*weight);v当创建当
12、创建 一个类型为一个类型为aboy的对象时,其创建和初始化的步骤的对象时,其创建和初始化的步骤如下表所示。如下表所示。v例如,创建一个子类对象时例如,创建一个子类对象时Java程序程序设计设计与开与开发发2022-12-8Java程序程序设计设计与开与开发发2022-12-8vJava的类加载过程和对象初始化顺序,按照如下步骤进行:的类加载过程和对象初始化顺序,按照如下步骤进行:首先,当类被加载时执行首先,当类被加载时执行静态变量初始化静态变量初始化、静态初始化块静态初始化块.然后,然后,非静态变量初始化非静态变量初始化、非静态初始化块非静态初始化块被执行被执行.最后,最后,构造方法被执行。构
13、造方法被执行。从父类的构造方法递归执行从父类的构造方法递归执行.即,依次执行:即,依次执行:(静态变量、静态初始化块静态变量、静态初始化块)(变量、初始化块变量、初始化块)构造方法构造方法 Java程序程序设计设计与开与开发发2022-12-8注意注意,(1)在继承情况下在继承情况下,并不是父类完全初始化完毕后才进行子类并不是父类完全初始化完毕后才进行子类的初始化的初始化!(2)静态变量和静态初始化块是依照他们在类中的定义顺序静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样进行初始化的。同样,变量和初始化块也遵循这个规律变量和初始化块也遵循这个规律.下面举例说明下面举例说明.
14、【例例3.2】类加载和对象初始化类加载和对象初始化Java程序程序设计设计与开与开发发2022-12-8v3.2.4 上转型对象上转型对象 梨子梨子-水果,乌龟水果,乌龟-动物,学生动物,学生-人等概念具有从属关系,前者人等概念具有从属关系,前者是后者的一种。是后者的一种。例如,对于例如,对于Person类和子类类和子类Student;当创建;当创建Student子类子类对象时,并把这个对象的引用放到类对象时,并把这个对象的引用放到类Person声明的对象声明的对象中,即:中,即:Person p=new Student();或者或者 Person p;Student s=new Studen
15、t();p=s;则称则称 对象对象p是子类对象是子类对象s的的上转型对象上转型对象.类似地类似地,也可以将创建的间接子类也可以将创建的间接子类 Graduate对象放到对象放到Person对象引用中。对象引用中。v 对象的上转型对象的实体是子类负责创建的,只是失去了对象的上转型对象的实体是子类负责创建的,只是失去了原对象的一些属性和方法,其特点如图所示:原对象的一些属性和方法,其特点如图所示:Java程序程序设计设计与开与开发发2022-12-8v原对象和上转型对象之间关系原对象和上转型对象之间关系v上转型对象的特点是:上转型对象的特点是:a.上转型对象不能操作子类新增的变量和方法上转型对象不
16、能操作子类新增的变量和方法.b.上转型对象可以操作子类继承上转型对象可以操作子类继承或隐藏或隐藏的成员变量,也可以使的成员变量,也可以使用子类继承或重写的方法用子类继承或重写的方法.c.可将上转型对象再转换到一个子类对象,这时该子类对象又可将上转型对象再转换到一个子类对象,这时该子类对象又具备了子类的所有属性和功能具备了子类的所有属性和功能.【例例3.3】上转型对象上转型对象Java程序程序设计设计与开与开发发2022-12-8v上转型对象应用举例上转型对象应用举例.问题问题:下列语句正确吗下列语句正确吗?Student s=new Person();上转型对象是父类对象吗?上转型对象是父类对
17、象吗?Java程序程序设计设计与开与开发发2022-12-83.2.5 this和和super this,super分别指代当前对象和父类对象,通常出现在构造分别指代当前对象和父类对象,通常出现在构造方法中。例如,方法中。例如,class Person String name=“zhangshan”;public Person()/super(name);/显式调用父类带参的构造方法显式调用父类带参的构造方法 this(name);/调用重载的构造方法调用重载的构造方法,Person(name)?public Person(String name)this.name=name;/为同名的成员变
18、量赋值为同名的成员变量赋值 Java程序程序设计设计与开与开发发2022-12-8v注意以下几点:注意以下几点:1)在一个构造方法中使用了在一个构造方法中使用了this或或super语句,那么它必须作语句,那么它必须作为构造方法的第一条语句为构造方法的第一条语句.2)只能在构造方法只能在构造方法(非其他实例方法非其他实例方法)中用中用this语句来调用类的语句来调用类的其他构造方法,且不能通过方法名来直接调用构造方法其他构造方法,且不能通过方法名来直接调用构造方法.如如果调用父类构造方法也只能用果调用父类构造方法也只能用super而不是父类名而不是父类名.3)this,super对象不能出现在
19、静态方法中对象不能出现在静态方法中.public static void main(String args)this.play();/Java程序程序设计设计与开与开发发2022-12-83.3 多态多态v多态是指一个名称具有多种功能。即同名但拥有不同的方法多态是指一个名称具有多种功能。即同名但拥有不同的方法体。分重载(体。分重载(overloading)和覆盖()和覆盖(overriding)两种。)两种。v重载,又称编译时多态,在一个类中通过不同参数个数或不重载,又称编译时多态,在一个类中通过不同参数个数或不同类型参数来体现。如:同类型参数来体现。如:sum(byte a,byte b);
20、sum(int a,int b);sum(double a,double b);Java程序程序设计设计与开与开发发2022-12-8v构造方法的重载构造方法的重载 构造方法重载的目的是构造方法重载的目的是以不同的方法对类进行初始化。以不同的方法对类进行初始化。例如,例如,为类为类Person编写构造方法编写构造方法:public Person()public Person(String name)public Person(int ID)public Person(String name,String ID)为为Student子类编写构造方法子类编写构造方法:public Student()
21、public Student(String name,String no)v如果构造方法有返回值类型如果构造方法有返回值类型(包括包括void)修饰,那它不再是构修饰,那它不再是构造方法而成了普通方法,一般不提倡这么做。造方法而成了普通方法,一般不提倡这么做。构造方法可以被继承构造方法可以被继承吗吗?可以用可以用static修饰吗修饰吗?Java程序程序设计设计与开与开发发2022-12-8v方法覆盖,又称运行时多态,只有在运行时(非编译时)根方法覆盖,又称运行时多态,只有在运行时(非编译时)根据对象的类型来决定是调用父类的同名方法还是子类重写的据对象的类型来决定是调用父类的同名方法还是子类重
22、写的方法。例如,方法。例如,狗叫,猫叫,老虎叫,狮子叫声都不一样狗叫,猫叫,老虎叫,狮子叫声都不一样!方法覆盖条件:方法覆盖条件:1)方法名相同方法名相同;2)方法的参数列表完全相同方法的参数列表完全相同;3)返回值必须相同返回值必须相同;举例说明如下:举例说明如下:方法的访问修饰符方法的访问修饰符有影响吗有影响吗?对照想一想,方法对照想一想,方法重载的条件呢重载的条件呢?【例例3.4】方法重载方法重载Java程序程序设计设计与开与开发发2022-12-8【例例3.5】方法覆盖方法覆盖Java程序程序设计设计与开与开发发2022-12-8v下面下面修改修改一下上述一下上述main方法中的几个语
23、句,如上图所示,方法中的几个语句,如上图所示,则运行结果呢?则运行结果呢?Animal a=new Animal();Animal c=new Cat();Animal d=new Dog();a.sound();c.sound();d.sound();Java程序程序设计设计与开与开发发2022-12-8关于方法覆盖关于方法覆盖(重写重写)vJava运行时系统运行时系统根据调用该方法的对象根据调用该方法的对象,来决定调用哪个,来决定调用哪个方法。对于子类的一个对象,如果子类方法。对于子类的一个对象,如果子类重写了重写了父类的方法,父类的方法,则运行时系统则运行时系统调用子类的方法调用子类的方
24、法;如果子类;如果子类继承了继承了父类的方法父类的方法(未重写),则运行时系统(未重写),则运行时系统调用父类的方法。调用父类的方法。vprivate方法可以被覆盖吗?方法可以被覆盖吗?final方法可以被覆盖吗?方法可以被覆盖吗?v注意,方法覆盖还存在访问权限的问题。注意,方法覆盖还存在访问权限的问题。Java程序程序设计设计与开与开发发2022-12-8v变量覆盖变量覆盖 或称变量隐藏,只要变量名相同就实现了隐藏。或称变量隐藏,只要变量名相同就实现了隐藏。其修饰符和类型可以不同。其修饰符和类型可以不同。例如,例如,问题,这样赋值可以吗问题,这样赋值可以吗?woman.aveHight=17
25、0.5f;Java程序程序设计设计与开与开发发2022-12-83.4 修饰符修饰符3.4.1 访问修饰符访问修饰符 在定义类,成员变量,方法时,可以在其前面加上修饰在定义类,成员变量,方法时,可以在其前面加上修饰符符。有访问修饰符和非访问修饰符之分。有访问修饰符和非访问修饰符之分。访问修饰符访问修饰符 是一组限定类,成员变量或方法能在多大范是一组限定类,成员变量或方法能在多大范围内被访问的修饰符。围内被访问的修饰符。v类的访问修饰符只有两种,而成员变量和方法可以拥有类的访问修饰符只有两种,而成员变量和方法可以拥有4 4种不同的修饰符种不同的修饰符.如图所示:如图所示:Java程序程序设计设计
展开阅读全文